【问题标题】:ROLLUP, CUBE or GROUPING SETS汇总、多维数据集或分组集
【发布时间】:2013-08-26 15:26:35
【问题描述】:

有关架构详细信息,请参阅http://sqlfiddle.com/#!3/1b16f/7 的链接。我使用动态数据透视查询来获取月度详细信息。现在,我正在尝试在同一个数据透视查询中获取“事务”和“客户”的小计以及最后的总计。到目前为止,我已经尝试使用多维数据集和汇总进行分组,但没有得到令人满意的结果。

我正在努力最终实现这一目标。

+---------------------+---------------+-------------+-------------+-------------+
|         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。请帮忙!!

【问题讨论】:

    标签: sql sql-server sql-server-2008-r2 cube rollup


    【解决方案1】:

    我能够用这个查询回答我的问题:

    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,' 
    
    +@cols+ 
    '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 Fiddle 进行演示:http://sqlfiddle.com/#!3/1b16f/18

    【讨论】:

    • 请使用您问题上的编辑链接添加更多信息。 Post Answer 按钮应仅用于问题的完整答案。
    • @enginefree,非常鼓励回答您自己的问题。话虽如此,youbaraj,您应该在此处发布您的解决方案,并用解释代替 SQLFiddle。
    • @enginefree 答案不完整是什么意思?我真的觉得这些天我们在 stackoverflow 中有更多的编辑,而不是真正的问题解决者。 Stakowerflow 现在应该为这样的“内容编辑器”启动“contentoverflow”...@david..谢谢队友..我应该这样做
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2016-10-24
    • 2019-09-29
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多