首页 > 解决方案 > SQL/DB2 如何查找一个 ID 在一年中出现的次数?

问题描述

查找 ID 每年出现的次数并获取多列结果的最佳/最简单方法是什么。这似乎比我最初想象的要困难得多,除非我忽略了一些东西。

Table Example

ID    Year 
A     2010
B     2011
B     2012
C     2011
C     2011
C     2012

Desired Output
ID 2010_CNT 2011_CNT 2012_CNT
A  1        0        0
B  0        1        1   
C  0        2        1 

标签: sqldb2

解决方案


 WITH CTE(ID,YEAR)AS
  (
     SELECT  'A',     2010  UNION ALL
     SELECT 'B',     2011 UNION ALL
     SELECT 'B',     2012 UNION ALL
     SELECT 'C',     2011 UNION ALL
     SELECT 'C',     2011 UNION ALL
     SELECT 'C',     2012 
  )
  SELECT C.ID,
     SUM(CASE WHEN C.YEAR=2010 THEN 1 ELSE 0 END)AS Y_2010_CNT,
     SUM(CASE WHEN C.YEAR=2011 THEN 1 ELSE 0 END)AS Y_2011_CNT,
     SUM(CASE WHEN C.YEAR=2012 THEN 1 ELSE 0 END)AS Y_2012_CNT 
   FROM CTE AS C
   GROUP BY C.ID
   ORDER BY C.ID;

您可以使用条件聚合(上面的示例。CTE 表示您提供的数据)


推荐阅读