Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 标记汇总分组行_Sql_Sql Server 2008 - Fatal编程技术网

Sql 标记汇总分组行

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

我的任务是修复一个查询,该查询当前使用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 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