Sql 标记汇总分组行
我的任务是修复一个查询,该查询当前使用GROUP BY和ROLLUP创建总计行Sql 标记汇总分组行,sql,sql-server-2008,Sql,Sql Server 2008,我的任务是修复一个查询,该查询当前使用GROUP BY和ROLLUP创建总计行 SELECT CONVERT(date, ShipDate), DelNum, SUM(ShipQty), ROW_NUMBER() OVER(ORDER BY CASE WHEN ShipDate IS NULL THEN 0 ELSE ShipDate END ASC,CASE WHEN DelNum IS NULL THEN 'Z' ELSE DelNum EN
SELECT CONVERT(date, ShipDate),
DelNum,
SUM(ShipQty),
ROW_NUMBER() OVER(ORDER BY CASE WHEN ShipDate IS NULL THEN 0 ELSE ShipDate END ASC,CASE WHEN DelNum IS NULL THEN 'Z' ELSE DelNum END ASC)
FROM Shipments
WHERE Company = 'ABC' AND CustNum = 3
GROUP BY ShipDate, DelNum, ShipQty WITH ROLLUP
这就是我被问到的问题。我已经添加了一些标签和一些排序,以使其更具可读性:
SELECT CONVERT(date, ShipDate),
CASE WHEN (GROUPING(DelNum) = 1) THEN 'SUB TOTAL FOR ' + CONVERT(NVARCHAR, ShipDate, 111)
WHEN (GROUPING(ShipQty) = 1) THEN 'SUB TOTAL FOR ' + DelNum
--WHEN (GROUPING(Total) = 1) THEN 'TOTAL'
ELSE ISNULL(DelNum, 'UNKNOWN')
END AS DelNum,
SUM(ShipQty) Total,
ROW_NUMBER() OVER(ORDER BY CASE WHEN ShipDate IS NULL THEN 0 ELSE ShipDate END ASC,CASE WHEN DelNum IS NULL THEN 'Z' ELSE DelNum END ASC)
FROM Shipments
WHERE Company = 'ABC' AND CustNum = 3
GROUP BY ShipDate, DelNum, ShipQty WITH ROLLUP
ORDER BY ShipDate, DelNum, Total ASC
我遇到的问题是我注释掉的那一行。如何标记总行。我总觉得自己没被认出来
任何帮助都将不胜感激。Total是一个列别名,您不能在分组函数中引用它。您也不能像这样将聚合放在分组函数中:
WHEN (GROUPING(SUM(ShipQty)) = 1)
您可以做的是检查所有的组字段是否都有GROUPING=1:
请注意,您需要将该检查移至案例顶部,否则案例将在评估之前短路,因为每个分组本身等于1
CASE WHEN (GROUPING(ShipDate) = 1 and GROUPING(DelNum) = 1 and GROUPING(ShipQty) = 1) THEN 'TOTAL'
WHEN (GROUPING(DelNum) = 1) THEN 'SUB TOTAL FOR ' + CONVERT(NVARCHAR, ShipDate, 111)
WHEN (GROUPING(ShipQty) = 1) THEN 'SUB TOTAL FOR ' + DelNum
ELSE ISNULL(DelNum, 'UNKNOWN')
END AS DelNum