SQL Pivot和Total ROLLUP

时间:2015-01-20 18:50:10

标签: sql-server pivot-table rollup

请帮助我了解如何在此数据透视表上实施ROLLUP

我一直在寻找其他几个书面解决方案来满足我的要求,但是当我将它应用到我的情况时,我似乎错过了一些东西。 SQL不是我的力量,但我觉得每次完成某些事情我都会理解更多。

在下面创建此透视图语句有点困难,因为我需要使用动态字段来汇总不同dID的总计,具体取决于运行报告的cID

我正在使用一种方法来动态创建NVARCHAR,它将代表我在数据透视表中应用SUM的列。我已尝试将ROLLUP功能用作GROUP BY SELECT条件的一部分但未成功。

我想要的总体布局如下所示。另外,我有一个来自不同数据集的相同dID的第二个数据透视表,我想将两者中的总计合并到一个新表中,并创建一个GrandTotal。我想这最好用UNION

完成
  • dID,dName,qID' s,dID_Total
  • 1,A,100-113,#
  • 2,B,100-113,#
  • 3,C,100-113,#
  • 4,D,100-113,#
  • 5,E,100-113,#

    DECLARE @sID int = 100
    DECLARE @cID int = 5        
    DECLARE @ColumnName AS NVARCHAR(MAX)
    
    --Get distinct values of the PIVOT Column
    SELECT @ColumnName = ISNULL(@ColumnName + ',', '') + QUOTENAME(qID)
    FROM(SELECT qID FROM qTable WHERE cID = @cID) AS QuestionID
    
    DECLARE@ PivotTableSQL NVARCHAR(MAX)
    SET@ PivotTableSQL = N'
      SELECT 
        dID, dName, ' + @ColumnName + '
      FROM (
        SELECT dID, dName, qID, weighted AS     [score]
        FROM sourceTable
        WHERE sID = ' + CAST(@sID AS nvarchar(8)) + ' AND cID = ' + CAST(@cID AS nvarchar(8)) + '
      ) AS PivotData
      PIVOT (
        SUM(score)
        FOR [qID] IN (
          ' + @ColumnName + '
        )
      ) AS PivotTable
      GROUP BY
        dID, dName,' + @ColumnName
    EXECUTE(@PivotTableSQL)
    

0 个答案:

没有答案