2017-08-16 33 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) 
相關問題