2017-08-16 43 views
0

我想在“语言”列上执行ROLLUP,并将最后一行生成为“总计”。
我不确定在哪里放ROLLUP。
对于如:如何在Language列上执行ROLLUP并获取最后一行的TOTAL行?

AS 
     BEGIN 
      declare @sqlCommand NVARCHAR(4000) = 
      'SELECT Language, col2, col3, col4, Total = col2 + col3 + col4 
      FROM ( SELECT xL.lN, xS.sN, UC.UC 
        FROM (UC LEFT JOIN xL ON UC.Language = xL.xL) LEFT JOIN xS 
        ON UC.ssn = xS.ssn 
        WHERE 
         ((DS BETWEEN .... AND ....) AND 
         (HS BETWEEN .... AND ....) AND 
         (MS BETWEEN .... AND ....))) UCs 
         PIVOT (SUM (UC) for sN IN 
         (col2, col3, col4)) 
         AS PVT;'; 
     EXEC SP_EXECUTESQL @sqlCommand 
     END 

回答

0

汇总与Group by..做,如果你必须在这里申请一组,则需要按您所选择的所有列。

0

您可以尝试分组集。

With result as (
    SELECT Language, col2, col3, col4, Total = col2 + col3 + col4 
    FROM ( SELECT xL.lN, xS.sN, UC.UC 
      FROM (UC LEFT JOIN xL ON UC.Language = xL.xL) LEFT JOIN xS 
      ON UC.ssn = xS.ssn 
      WHERE 
      ((DS BETWEEN .... AND ....) AND 
      (HS BETWEEN .... AND ....) AND 
      (MS BETWEEN .... AND ....)) 
    ) UCs 
    PIVOT (SUM (UC) for sN 
     IN (col2, col3, col4) 
    ) AS PVT 
) 
SELECT Language, col2, col3, col4, sum(Total) as Total 
FROM result 
GROUP BY GROUPING SETS((Language, col2, col3, col4),()) 
+0

谢谢你。这个解决方案虽然有帮助,但仍然是NULL,我得到最后一行。它增加了一行 –

+0

@syang 但是,我将最后一行作为NULL。 RANGE = [2],[3],[4],[5] SELECT服务器, '+ RANGE +',和(合计)为:总 \t \t \t \t \t FROM结果 \t \t \t \t \t GROUP BY GROUPING SETS((Server,'+ RANGE +'),());'; 你能帮我进一步吗? –

+0

我不清楚你的意思。你可以把最后一行的想法输出的样本结果集? –

0

如果你试图让行总计每一列的总和,你可以试试下面的查询:

--Method 1:

With result as (
    SELECT Language, col2, col3, col4, Total = col2 + col3 + col4 
    FROM ( SELECT xL.lN, xS.sN, UC.UC 
      FROM (UC LEFT JOIN xL ON UC.Language = xL.xL) LEFT JOIN xS 
      ON UC.ssn = xS.ssn 
      WHERE 
      ((DS BETWEEN .... AND ....) AND 
      (HS BETWEEN .... AND ....) AND 
      (MS BETWEEN .... AND ....)) 
    ) UCs 
    PIVOT (SUM (UC) for sN 
     IN (col2, col3, col4) 
    ) AS PVT 
) 
SELECT Language, col2, col3, col4, sum(Total) as Total 
FROM result 
UNION ALL 
SELECT 'TOTAL', sum(col2) as col2, sum(col3) as col3, cum(col4) as col4, sum(Total) as Total 
FROM result 

--Method 2:

With result as (
    SELECT Language, col2, col3, col4, Total = col2 + col3 + col4 
    FROM ( SELECT xL.lN, xS.sN, UC.UC 
      FROM (UC LEFT JOIN xL ON UC.Language = xL.xL) LEFT JOIN xS 
      ON UC.ssn = xS.ssn 
      WHERE 
      ((DS BETWEEN .... AND ....) AND 
      (HS BETWEEN .... AND ....) AND 
      (MS BETWEEN .... AND ....)) 
    ) UCs 
    PIVOT (SUM (UC) for sN 
     IN (col2, col3, col4) 
    ) AS PVT 
) 
SELECT case when grouping(Language) = 1 then 'Total' else Language end as Language 
, sum(col2) as col2 
, sum(col3) as col3 
, sum(col4) as col4 
, sum(Total) as Total 
from result 
group by Language with Rollup 
order by grouping(Language) 
相关问题