UTNianos

Versión completa: [SQL] Juntar campos repetidos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas gente.

Estoy con el TP de Gestión y resulta que tengo algo que no puedo resolver de una manera no tan fea.

Resulta que tengo una tabla con Recorridos, los Recorridos están compuestos por:
- Codigo Recorrido
- Ciudad Origen
- Ciudad Destino
- Precio Base Por Pasaje
- Precio Base Por KG

Bue... la cuestión que cuando consulto a la tabla maestra me agarro éstos datos, los agrupo, blabla. Ahora el tema es que, por cada Recorrido, tengo 2 registros. Uno con el Precio Base Por Pasaje y otro con el Precio Base Por KG. Por si no se entiende:

Cod - Origen - Destino - PB Pasaje - PB KG
1 - Buenos Aires - Santa Fe - 353.2 - 0
1 - Buenos Aires - Santa Fe - 0 - 34.2

Bueno, la cuestión es que quiero juntar ésto en un sólo registro, para que me quede todo en una tabla bien:

1 - Buenos Aires - Santa Fe - 353.2 - 34.2

Recién estoy aprendiendo con SQL, pero le estoy dando muchas vueltas a ésto y por un lado me tiran crear tablas temporales y hacer merge, otros update, otros select dentro de un select y termino no llegando a nada...

Si me pueden dar una mano se los agradecería. Gracias ;)
mmm a ver si no entendi mal el modelo, pero agrupa por codigo de recorrido, origen y destino y hace sum(pb pasaje) y sum(pb kg)...osea te da para esos campos 353.2 + 0 = 353.2 y 0 + 34.2 y listo!

Aca una mini pruebita, algo asi es no? Correlo en el Management y fijate el resultado


create table #temp (
cod int,
orig nvarchar(50),
dest nvarchar(50),
PBP decimal (18,2),
PBKG decimal (18,2)
)

insert into #temp
values (1, 'bsas','sf', 55,0)
insert into #temp
values (1, 'bsas','sf', 0,30.2)

insert into #temp
values (2, 'bsas','co', 22,0)
insert into #temp
values (2, 'bsas','co', 0,89.21)

select * from #temp

select cod, orig, dest, sum(pbp) as PBP, sum(pbkg) as PBKG
from #temp
group by cod, orig, dest

drop table #temp

Si, eso funcionaria. Si lo querés hacer sin usar GROUP BY podes probar esto:


SELECT
k.cod,
k.orig,
k.dest,
p.pbp,
k.pbkg
FROM
#temp k INNER JOIN
(SELECT cod, pbp FROM #temp WHERE pbp > 0) p
ON k.cod = p.cod
WHERE
k.pbkg > 0


Si queres guardar ese resultado en otra tabla, podes crear otra tabla con las mismas caracteristicas de #temp y agregar

INSERT INTO nueva_tabla

arriba del SELECT.
Yo te recomendaria la opcion de pablog! usando el group by.
Hacer un join usando dos veces la misma tabla es un atentado a la performance del query. Por cada registro de la tabla vas a recorrer toda la tabla nuevamente.
Con el group by recorres una sola vez la tabla entera y listo. Podes usar sum() o max() da lo mismo.

Saludos!
(07-05-2013 10:51)Matias_Ari escribió: [ -> ]Yo te recomendaria la opcion de pablog! usando el group by.
Hacer un join usando dos veces la misma tabla es un atentado a la performance del query. Por cada registro de la tabla vas a recorrer toda la tabla nuevamente.
Con el group by recorres una sola vez la tabla entera y listo. Podes usar sum() o max() da lo mismo.

Saludos!

sobre todo considerando que la tabla tiene 506060 registros...
URLs de referencia