如何按年划分枢轴?
SELECT YEAR(bolfecha) ,pvt.[C],PVT.[P]
FROM
(select bolfecha, bolestado
from Tbboleta) as src
PIVOT
(
COUNT(bolestado)
FOR bolestado IN ([C], [P])
) AS pvt;
Bolfecha它是具有日期的专栏,如2005-02-01 使用这个代码每年给我一次,而不是仅在2005年之前将它们分组,然后是2006年的所有寄存器,依此类推......
我试图反驳多少' C'和' P'在bolestado专栏上注册,这有效,但我不能按年份对它们进行分组,请帮忙 它给了我这样的东西
2005 53 3
2006 2 0
2006 2 0
2006 6 0
。 。
2005它是唯一一个实际分组的人,我甚至不知道为什么 编辑:哦,我知道为什么2005年它是唯一一个组合它的人,因为它在2005年每行只有2005-12-31所以这就是为什么
答案 0 :(得分:1)
首先使用GROUP BY
对数据进行分组,然后使用PIVOT
将行数据转换为列。
首先,按预期分组:
SELECT YEAR(bolfecha) [Year], bolestado, COUNT(*) ItemCount FROM Tbboleta
GROUP BY YEAR(bolfecha), bolestado
这会产生这样的结果:
Year bolestado ItemCount
2005 C 10
2005 P 7
2006 C 3
2006 P 8
然后,您现在可以使用以下方法将数据透视应用于此结果集:
SELECT * FROM
(
SELECT YEAR(bolfecha) [Year], bolestado, COUNT(*) ItemCount FROM Tbboleta
GROUP BY YEAR(bolfecha), bolestado
) RawData
PIVOT (
MIN(ItemCount) FOR bolestado IN (C, P)
) PivotData
这会给你这个结果:
Year C P
2005 10 7
2006 3 8
PIVOT
可以选择您想要的值,并根据简单的聚合函数(SUM
,MIN
,AVG
,COUNT
为这些值创建列...)但你不能同时分组。如果您需要某个论坛,则需要在执行GROUP BY
之前使用PIVOT
单独执行此操作。