按年度分组

时间:2017-11-19 21:12:17

标签: sql sql-server date pivot

如何按年划分枢轴?

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所以这就是为什么

1 个答案:

答案 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可以选择您想要的值,并根据简单的聚合函数(SUMMINAVGCOUNT为这些值创建列...)但你不能同时分组。如果您需要某个论坛,则需要在执行GROUP BY之前使用PIVOT单独执行此操作。