2013-08-23 61 views
0

有關模式詳細信息,請參閱http://sqlfiddle.com/#!3/1b16f/7的鏈接。我已使用動態數據透視查詢獲取月份詳細信息。現在,我試圖在同一個數據透視查詢中獲得「transactional」和「Customer」的總計以及最後的總數。到目前爲止,我已經嘗試使用多維數據集和彙總進行分組,但沒有得到滿意的結果。ROLLUP,CUBE或GROUPING SETS

我試圖在最後達到此目的。

+---------------------+---------------+-------------+-------------+-------------+ 
|   CTQ   |  TYPE  | Oct-12 | Nov-12 | Dec-12 | 
+---------------------+---------------+-------------+-------------+-------------+ 
| CAR     | CUSTOMER  | 4.019040077 | 4.128151178 | 4.05606883 | 
| REJECTION   | CUSTOMER  | NULL  | NULL  | 3.126549759 | 
| REOPEN    | CUSTOMER  | 3.010499668 | 3.043744049 | 2.985404802 | 
| REPEAT    | CUSTOMER  | 3.086827141 | 3.055288995 | 3.202606293 | 
| CUSTOMER TOTAL  |    | 2.111  | 2.111  | 2.111  | 
| QMC     | TRANSACTIONAL | 3.699047224 | 3.417352407 | 3.525099552 | 
| SQ     | TRANSACTIONAL | NULL  | 5.017541394 | 4.90992542 | 
| TAT     | TRANSACTIONAL | 2.548737677 | 2.509322914 | 2.538090124 | 
| TTU     | TRANSACTIONAL | 3.364436242 | 3.295240684 | 3.294951974 | 
| TRANSACTIONAL TOTAL |    | 2.33  | 2.33  | 2.33  | 
| GRAND TOTAL   |    | 2.12  | 2.12  | 2.12  | 
+---------------------+---------------+-------------+-------------+-------------+ 

我正在使用SQL Server 2008R2。請幫忙!!

回答

0

我能回答我的問題與此查詢:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

    SELECT @cols = ISNULL(@cols+',','') + QUOTENAME(DATENAME(MONTH, MNTH)+' '+DATENAME(YEAR, MNTH)) 
    FROM CAPABILITY 
    WHERE MNTH BETWEEN DATEADD(M,-10,CURRENT_TIMESTAMP) AND DATEADD(M,0,CURRENT_TIMESTAMP) 
    GROUP BY DATENAME(MONTH, MNTH), DATENAME(YEAR, MNTH), DATEPART(MONTH,mnth) 
    ORDER BY DATENAME(YEAR, MNTH), DATEPART(MONTH,mnth) 
SET @query = 'SELECT TYPE,CTQ,' 

[email protected]+ 
'FROM 

(
SELECT 
CASE 
WHEN CTQ IS NULL AND TYPE IS NULL THEN ''CUST + TRANS TOTAL'' 
WHEN CTQ IS NULL AND TYPE IS NOT NULL THEN TYPE+''TOTAL'' 
WHEN CTQ IS NULL AND TYPE IS NULL THEN '''' 
WHEN GROUPING(TYPE)=1 THEN ''CUST + TRANS'' 
ELSE TYPE 
END AS [TYPE], 
CTQ,   
    SUM(opportunity)AS Sigma  

    ,DATENAME(MONTH, MNTH)+'' ''+DATENAME(YEAR, MNTH) 
AS MONTHS 
    FROM CAPABILITY 

     GROUP BY ROLLUP(CTQ), ROLLUP(TYPE),DATENAME(MONTH, MNTH)+'' ''+DATENAME(YEAR, MNTH) 

)X 

PIVOT 
      (
       MIN(SIGMA) 
       FOR MONTHS in (' + @cols + ') 
      ) X 

     ORDER BY TYPE ASC 
      ' 
    --PRINT (@QUERY) 
EXECUTE (@QUERY) 

示範看到這個SQL小提琴:http://sqlfiddle.com/#!3/1b16f/18

+0

請使用您的問題編輯鏈接添加額外的信息。後回答按鈕應該只用於問題的完整答案。 – enginefree

+0

@enginefree,回答你自己的問題是非常鼓舞人心的。這就是說,youbaraj,你應該在這裏發佈你的解決方案,並用一個解釋代替SQLFiddle。 –

+0

@enginefree你是什麼意思答案不完整?我認真地感覺到,這些天我們有更多的編輯器,而不是真正的問題解決者。 Stakowerflow現在應該爲這樣的「內容編輯器」啓動「contentoverflow」...... @ david ..感謝隊友......我應該這樣做 –