如何在PIVOT中的多个列上聚合

时间:2016-10-07 06:10:45

标签: sql-server

我有两个Column Users和NewUsers我需要将这两个作为Quarterly求和,所以我使用pivot函数,所以我在下面写了查询.... 代码是

select [week],[years],pivoting.[1] as Q1 ,pivoting.[2] AS Q2,pivoting.[3] AS Q3,pivoting.[4] AS Q4,pivoting.[1] as N1,pivoting.[2] AS N2,pivoting.[3] AS N3,pivoting.[4] AS N4 into #addpivot from 
(
    select Week,years,Quarter,users,NewUsers from #pivottable
) as PivotData 
pivot 
(
     sum(users) for Quarter in ([1],[2],[3],[4])
) as pivoting
pivot
(
    sum(NewUsers) for Quarter in ([1],[2],[3],[4])
) as pivoting

但它在第二行季度无效列名

中显示错误

我出错的地方不明白请帮帮我.......

3 个答案:

答案 0 :(得分:0)

我明白多少价值观是什么意思...... 枢轴就像这样......

SELECT *
FROM table
PIVOT( SUM(NewUsers) FOR Quarter IN ([1],[2],[3],[4]) ) AS PVTTable

答案 1 :(得分:0)

如果我已正确读取您的数据,您需要取消数据的显示并添加一列以识别要在旋转之前进行数据转换的值。我称这个类别为'并使用CROSS APPLY,但您也可以使用CASE。

SELECT * INTO #PivotTable FROM (
VALUES 
(1, 1, 1, 10, 12),
(1, 1, 1, 11, 13),
(1, 1, 2, 8,  10),
(1, 1, 2, 7,  11),
(1, 1, 3, 11, 14),
(1, 1, 3, 8,  15),
(1, 1, 4, 15, 10),
(1, 1, 4, 17, 11)
)A (Week,Years,Quarter,Users,NewUsers)


SELECT * FROM 
    (SELECT Week
        ,Years
        ,Category
        ,Value FROM #PivotTable 
        CROSS APPLY 
            (SELECT 'NewUsersQ'+CONVERT(VARCHAR(1),Quarter) Category, NewUsers Value
            UNION ALL 
            SELECT 'UsersQ'+CONVERT(VARCHAR(1),Quarter) Category, Users Value   
            ) A 
    ) SRC
PIVOT (
        SUM(Value) FOR Category IN 
        ([UsersQ1], [NewUsersQ1], [UsersQ2], [NewUsersQ2], [UsersQ3], [NewUsersQ3], [UsersQ4], [NewUsersQ4]) 
)Pvt

Week        Years       UsersQ1     NewUsersQ1  UsersQ2     NewUsersQ2  UsersQ3     NewUsersQ3  UsersQ4     NewUsersQ4
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1           1           21          25          15          21          19          29          32          21

答案 2 :(得分:0)

SELECT [week]
      ,[years]
      ,SUM(CASE WHEN Quarter = 1 THEN users ELSE 0 END) AS Q1
      ,SUM(CASE WHEN Quarter = 2 THEN users ELSE 0 END) AS Q2
      ,SUM(CASE WHEN Quarter = 3 THEN users ELSE 0 END) AS Q3
      ,SUM(CASE WHEN Quarter = 4 THEN users ELSE 0 END) AS Q4
      ,SUM(CASE WHEN Quarter = 1 THEN NewUsers ELSE 0 END) AS N1
      ,SUM(CASE WHEN Quarter = 2 THEN NewUsers ELSE 0 END) AS N2
      ,SUM(CASE WHEN Quarter = 3 THEN NewUsers ELSE 0 END) AS N3
      ,SUM(CASE WHEN Quarter = 4 THEN NewUsers ELSE 0 END) AS N4
FROM #pivottable
GROUP BY [week]
        ,[years]
相关问题