sql - 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
解决方案
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 表示您提供的数据)
推荐阅读
- javascript - 如果不存在参数,如何将动作传递给另一个动作 ReactJs
- mysql - mysql中的'<=>'和'is'有什么区别?
- flutter - Flutter - 在其他模型中导入模型
- c++ - 在连接到容器后或编译/调试之前运行脚本以在 VSCode 中设置环境
- angular - 如何在不使用 TableModel 的情况下在 Angular Carbon 设计系统中实现分页?
- python - 使用笔记本时,Tkinter 条目小部件不会接受输入
- vue.js - 将 npm 模块添加到 Piranha CMS
- c# - 如何将文件写入 .NET Core 中的项目文件夹?
- javascript - React:为什么这些组件在 useState 发生变化时没有更新?(应用挂载后渲染的组件)
- verilog - ShiftRegister Verilog HDL 输出给出 xxxxxxx