我们可以在用SQL做

时间:2019-03-19 09:07:53

标签: sql asp.net sql-server-2008

我有一个包含3列的表格。我在其中显示ContainerCount随时间变化的及时报告。 下图显示了实际表格 enter image description here

我正在对此表进行数据透视,图像如下所示 enter image description here

现在我要添加所有列,并希望在单个列中显示。但没有得到。该查询在下面提到

SELECT 'CFS to Zero' Location, sum( [0]+[1]+[2]+[3])  FROM                         
(SELECT  [ContainerCount],Time FROM #tt )as Tab1                        
PIVOT                        
(                        
MAX([ContainerCount]) FOR Time IN ([0])) AS Tab2 ;

2 个答案:

答案 0 :(得分:0)

使用coalesce()

SELECT 'CFS to Zero' Location, coalesce([0],0)+coalesce([1],0)+coalesce([2],0)+coalesce([3],0)  FROM                         
(SELECT  [ContainerCount],Time FROM #tt )as Tab1                        
PIVOT                        
(                        
MAX([ContainerCount]) FOR Time IN ([0],[1],[2],[3])) AS Tab2

答案 1 :(得分:0)

如果您只需要1个SUM,那么您实际上就不需要PIVOT。

只需汇总并获得MAX值,然后将它们求和即可。

这样做的好处是您可以使用BETWEEN仅选择一个时间范围。
无需在PIVOT中硬编码时间值。

SELECT 
 'CFS to Zero' AS Location, 
 SUM(MaxContainerCount) AS TotalMaxContainerCount
FROM
(
  SELECT 
   [Time], 
   MAX(ContainerCount) AS MaxContainerCount
  FROM #tt
  WHERE [Time] BETWEEN 0 AND 3
  GROUP BY [Time]
) q