[SQL] Combinar varias filas en una

Hola, a ver si podéis ayudarme que ya estoy volviéndome loco. Estoy intentando sacar un listado en SQL que combine varias filas en una, el código es algo del tipo:

select x.pet, x.fech, x.mic, x.ori, x.pen from
(
   select pd.peticioncb as pet, pd.fecha as fech, "Si" as MIC, "" as ORI, "" as PEN
   from pet_diario pd, pet_prueba pp, pet_control_muestra pcm
   where pd.idpeticion = pp.idpeticion
   and pp.idprueba = 2647
   and pd.peticioncb = pcm.peticioncb
   and pcm.idtubo = 77
   and pp.idtiporesultado <> -2
   and pd.fecha >= :Fecha_Inicial and pd.FECHA <= :Fecha_Final
   group by pet, fech
   UNION ALL
   select pd.peticioncb as pet, pd.fecha as fech, "" as MIC, "Si" as ORI, "" as PEN
   from pet_diario pd, pet_prueba pp, pet_control_muestra pcm
   where pd.idpeticion = pp.idpeticion
   and pp.idprueba = 2647
   and pd.peticioncb = pcm.peticioncb
   and pcm.idtubo = 88
   and pp.idtiporesultado <> -2
   and pd.fecha >= :Fecha_Inicial and pd.FECHA <= :Fecha_Final
   group by pet, fech
   UNION ALL
   select pd.peticioncb as pet, pd.fecha as fech, "" as MIC, "" as ORI, "No" as PEN
   from pet_diario pd, pet_prueba pp, pet_control_muestra pcm
   where pd.idpeticion = pp.idpeticion
   and pp.idprueba = 2647
   and pd.peticioncb = pcm.peticioncb
   and pcm.idtubo <> 77
   and pcm.idtubo <> 88
   and pp.idtiporesultado <> -2
   and pd.fecha >= :Fecha_Inicial and pd.FECHA <= :Fecha_Final
   group by pet, fech
) as x
group by x.pet, x.fech, x.mic, x.ori, x.pen
order by x.pet asc


Y el resultado que me saca es este:

Imagen

Pero lo que quiero es que me agrupe por Nº de petición y me saque solo una línea por cada petición.
No he dicho nada... veo que es mas complejo de lo que entendí.
nebb_5 escribió:Hola, a ver si podéis ayudarme que ya estoy volviéndome loco. Estoy intentando sacar un listado en SQL que combine varias filas en una, el código es algo del tipo:

select x.pet, x.fech, x.mic, x.ori, x.pen from
(
   select pd.peticioncb as pet, pd.fecha as fech, "Si" as MIC, "" as ORI, "" as PEN
   from pet_diario pd, pet_prueba pp, pet_control_muestra pcm
   where pd.idpeticion = pp.idpeticion
   and pp.idprueba = 2647
   and pd.peticioncb = pcm.peticioncb
   and pcm.idtubo = 77
   and pp.idtiporesultado <> -2
   and pd.fecha >= :Fecha_Inicial and pd.FECHA <= :Fecha_Final
   group by pet, fech
   UNION ALL
   select pd.peticioncb as pet, pd.fecha as fech, "" as MIC, "Si" as ORI, "" as PEN
   from pet_diario pd, pet_prueba pp, pet_control_muestra pcm
   where pd.idpeticion = pp.idpeticion
   and pp.idprueba = 2647
   and pd.peticioncb = pcm.peticioncb
   and pcm.idtubo = 88
   and pp.idtiporesultado <> -2
   and pd.fecha >= :Fecha_Inicial and pd.FECHA <= :Fecha_Final
   group by pet, fech
   UNION ALL
   select pd.peticioncb as pet, pd.fecha as fech, "" as MIC, "" as ORI, "No" as PEN
   from pet_diario pd, pet_prueba pp, pet_control_muestra pcm
   where pd.idpeticion = pp.idpeticion
   and pp.idprueba = 2647
   and pd.peticioncb = pcm.peticioncb
   and pcm.idtubo <> 77
   and pcm.idtubo <> 88
   and pp.idtiporesultado <> -2
   and pd.fecha >= :Fecha_Inicial and pd.FECHA <= :Fecha_Final
   group by pet, fech
) as x
group by x.pet, x.fech, x.mic, x.ori, x.pen
order by x.pet asc


Y el resultado que me saca es este:

Imagen

Pero lo que quiero es que me agrupe por Nº de petición y me saque solo una línea por cada petición.

Un union all une datos, o sea varias querys una detras de la otra, tienes que hacer o una query anidada con JOINS o subselects.
Join:
Select * from pacientes LEFT JOIN Pruebas on pacientes.idpaciente=pruebas.idpaciente
Subselects
Select *, (Select campo From Pruebas WHERE tipoPrueba="ORI" AND IDPACIENTE=pacientes.IDPaciente) As orina from pacientes

Usalas de guia a ver si te sirven...
Gracias a todos por responder, al final lo solucioné usando:
select x.pet, x.fech, max(x.mic), max(x.ori), max(x.pen)
...
Me alegro de que al final lo que puse sirvió de algo :D.
No sabia que se podia hacer una consulta sobre una consulta, algo nuevo que he aprendido.
5 respuestas