将行转换为列和组

  • 本文关键字:转换 sql sql-server
  • 更新时间 :
  • 英文 :


第一列中的记录可以是另一种类型(1.1,1.2),为了简化示例,只取2。

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

当前输出:

tbody> <<tr>1.21.11.11.2
ComedorNombre AreaCantidad
1.1APLICACIONES200
APLICACIONES300
ARANDANOS1000
PALTO20
PALTO30

为什么不使用条件聚合

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

相关内容

  • 没有找到相关文章

最新更新