The records in the first column can be of another type (1.1, 1.2), just take 2 to simplify the example.
SELECT com.NombrePuntoEntrega as Comedor,
a.NombreArea,
SUM(s.CantidadRaciones) as Cantidad
FROM PPA_SolicitudRaciones c inner join
PPA_SolicitudRacionesDET S on c.IdSolicitud =s.IdSolicitud and s.IdLocalidad =c.IdLocalidad
INNER JOIN PPA_AREAS A ON A.IDLOCALIDAD=S.IDLOCALIDAD and a.IdArea =s.IdArea
INNER JOIN PPA_PuntosEntrega com on com.IdLocalidad =s.IdLocalidad and com.IdPuntoEntrega =s.IdPuntoEntrega
WHERE (s.IdLocalidad =@IdLocalidad or @IdLocalidad =0)
AND (s.IdArea =@IdArea or @IdArea =0)
AND (c.FechaPedido between @FechaDel and @FechaAl or @FechaDel ='1900.01.01' )
AND (c.IdTipoComida =@TipoComida or @TipoComida=0)
GROUP BY com.NombrePuntoEntrega, a.NombreArea
Current output:
Comedor | Nombre Area | Cantidad |
---|---|---|
1.1 | APLICACIONES | 200 |
1.2 | APLICACIONES | 300 |
1.1 | ARANDANOS | 1000 |
1.1 | PALTO | 20 |
1.2 | PALTO | 30 |
Expected output: groups the first row and then flips the other columns. Put a 0 where there are no records for the 'cantidad' column.
Comedor | APLICACIONES | ARANDANOS | PALTO |
---|---|---|---|
1.1 | 200 | 1000 | 20 |
1.2 | 300 | 0 | 30 |
CodePudding user response:
Why not a conditional aggregation
SELECT Comedor = com.NombrePuntoEntrega
,APLICACIONES = SUM(case when a.NombreArea = 'APLICACIONES' then s.CantidadRaciones else 0 end)
,ARANDANOS = SUM(case when a.NombreArea = 'ARANDANOS' then s.CantidadRaciones else 0 end)
,PALTO = SUM(case when a.NombreArea = 'PALTO' then s.CantidadRaciones else 0 end)
FROM PPA_SolicitudRaciones c inner join
PPA_SolicitudRacionesDET S on c.IdSolicitud =s.IdSolicitud and s.IdLocalidad =c.IdLocalidad
INNER JOIN PPA_AREAS A ON A.IDLOCALIDAD=S.IDLOCALIDAD and a.IdArea =s.IdArea
INNER JOIN PPA_PuntosEntrega com on com.IdLocalidad =s.IdLocalidad and com.IdPuntoEntrega =s.IdPuntoEntrega
WHERE (s.IdLocalidad =@IdLocalidad or @IdLocalidad =0)
AND (s.IdArea =@IdArea or @IdArea =0)
AND (c.FechaPedido between @FechaDel and @FechaAl or @FechaDel ='1900.01.01' )
AND (c.IdTipoComida =@TipoComida or @TipoComida=0)
GROUP BY com.NombrePuntoEntrega