sql - 在几年内对多个列使用 COUNT()
问题描述
我有一个查询,显示当年的井数。我想显示过去 5 年的计数/年。我怎么能在一个查询中做到这一点?
今年,我正在使用YEAR(GETDATE())
. 在过去的五年里,我一直在想我可以使用:YEAR(GETDATE())-1
、、、YEAR(GETDATE())-2
等YEAR(GETDATE())-23
。我也认为一个CASE WHEN
子句可以工作,但不知道如何在SELECT
语句下使用它。
这是我当前的查询:
SELECT
COALESCE(w.WellType, 'Totals') AS 'WellTypes',
COUNT(DISTINCT(w.WellID)) AS '2021'
FROM Well w
LEFT JOIN Construct c ON c.WellKey = w.PKey
LEFT JOIN ConstructDate cd ON c.PKey = cd.ConstructKey
WHERE
YEAR(cd.EventDate) = YEAR(GETDATE())
AND cd.Event = 'LATERALSTATUS'
AND cd.Comment = 'PA'
GROUP BY ROLLUP(w.WellType)
ORDER BY
CASE w.WellType
WHEN 'OW' THEN 1
WHEN 'GW' THEN 2
WHEN 'D' THEN 3
WHEN 'OWI' THEN 4
WHEN 'WI' THEN 5
END DESC
这是我目前的结果:
井型 | 2021 |
---|---|
威斯康星 | 10 |
OWI | 1 |
D | 21 |
GW | 40 |
OW | 72 |
总计 | 144 |
这就是我想要得到的:
井型 | 2021 | 2020 | 2019 | 2018 | 2017 |
---|---|---|---|---|---|
威斯康星 | 10 | 6 | 0 | 5 | 2 |
OWI | 1 | 2 | 3 | 6 | 5 |
D | 21 | 0 | 0 | 2 | 0 |
GW | 40 | 6 | 2 | 0 | 7 |
OW | 72 | 1 | 2 | 3 | 4 |
总计 | 144 | 15 | 7 | 14 | 18 |
我正在努力在 db-fiddle 中使用它,但我以前从未使用过它。我知道这很长,但现在,这是表格中的纯数据。“EventDate”、“Comment”和“Event”列来自名为“ConstructDate”的表。“WellType”列来自名为“Well”的表。
活动日期 | 井型 | 评论 | 事件 |
---|---|---|---|
2017 年 1 月 2 日 | OW | 功放 | 横向状态 |
2017 年 1 月 3 日 | OW | 功放 | 横向状态 |
2017 年 1 月 3 日 | OW | 功放 | 横向状态 |
2017 年 1 月 3 日 | OW | 功放 | 横向状态 |
2017 年 1 月 3 日 | 威斯康星 | 功放 | 横向状态 |
2017 年 1 月 3 日 | 威斯康星 | 功放 | 横向状态 |
2017 年 1 月 3 日 | OWI | 功放 | 横向状态 |
2017 年 1 月 3 日 | OWI | 功放 | 横向状态 |
2017 年 1 月 3 日 | OWI | 功放 | 横向状态 |
2017 年 1 月 3 日 | OWI | 功放 | 横向状态 |
2017 年 1 月 3 日 | OWI | 功放 | 横向状态 |
2017 年 1 月 4 日 | GW | 功放 | 横向状态 |
2017 年 1 月 4 日 | GW | 功放 | 横向状态 |
2017 年 1 月 5 日 | GW | 功放 | 横向状态 |
2017 年 1 月 5 日 | GW | 功放 | 横向状态 |
2017 年 1 月 5 日 | GW | 功放 | 横向状态 |
2017 年 1 月 5 日 | GW | 功放 | 横向状态 |
2017 年 1 月 5 日 | GW | 功放 | 横向状态 |
2018 年 1 月 1 日 | 威斯康星 | 功放 | 横向状态 |
2018 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2018 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2018 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2018 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2018 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2018 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2018 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2018 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2018 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2018 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2018 年 1 月 2 日 | D | 功放 | 横向状态 |
2018 年 1 月 2 日 | D | 功放 | 横向状态 |
2018 年 1 月 2 日 | OW | 功放 | 横向状态 |
2018 年 1 月 2 日 | OW | 功放 | 横向状态 |
2018 年 1 月 2 日 | OW | 功放 | 横向状态 |
2019 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2019 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2019 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2019 年 1 月 2 日 | GW | 功放 | 横向状态 |
2019 年 1 月 2 日 | GW | 功放 | 横向状态 |
2019 年 1 月 2 日 | OW | 功放 | 横向状态 |
2019 年 1 月 2 日 | OW | 功放 | 横向状态 |
2020 年 1 月 1 日 | 威斯康星 | 功放 | 横向状态 |
2020 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2020 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2020 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2020 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2020 年 1 月 2 日 | 威斯康星 | 功放 | 横向状态 |
2020 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2020 年 1 月 2 日 | OWI | 功放 | 横向状态 |
2020 年 1 月 2 日 | GW | 功放 | 横向状态 |
2020 年 1 月 2 日 | GW | 功放 | 横向状态 |
2020 年 1 月 2 日 | GW | 功放 | 横向状态 |
2020 年 1 月 2 日 | GW | 功放 | 横向状态 |
2020 年 1 月 2 日 | GW | 功放 | 横向状态 |
2020 年 1 月 2 日 | GW | 功放 | 横向状态 |
2020 年 1 月 2 日 | OW | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | 威斯康星 | 功放 | 横向状态 |
2021 年 8 月 16 日 | OWI | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | D | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 16 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 18 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | GW | 功放 | 横向状态 |
2021 年 8 月 17 日 | OW | 功放 | 横向状态 |
2021 年 8 月 17 日 | OW | 功放 | 横向状态 |
2021 年 8 月 18 日 | OW | 功放 | 横向状态 |
2021 年 8 月 18 日 | OW | 功放 | 横向状态 |
2021 年 8 月 18 日 | OW | 功放 | 横向状态 |
2021 年 8 月 19 日 | OW | 功放 | 横向状态 |
2021 年 8 月 19 日 | OW | 功放 | 横向状态 |
2021 年 8 月 19 日 | OW | 功放 | 横向状态 |
2021 年 8 月 19 日 | OW | 功放 | 横向状态 |
2021 年 8 月 19 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 20 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 21 日 | OW | 功放 | 横向状态 |
2021 年 8 月 22 日 | OW | 功放 | 横向状态 |
2021 年 8 月 22 日 | OW | 功放 | 横向状态 |
2021 年 8 月 23 日 | OW | 功放 | 横向状态 |
2021 年 8 月 23 日 | OW | 功放 | 横向状态 |
2021 年 8 月 23 日 | OW | 功放 | 横向状态 |
2021 年 8 月 23 日 | OW | 功放 | 横向状态 |
2021 年 8 月 23 日 | OW | 功放 | 横向状态 |
2021 年 8 月 23 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
2021 年 8 月 24 日 | OW | 功放 | 横向状态 |
解决方案
当您需要不同的约束来聚合您想要的内容时,这很棘手。我不会使用计数,而是使用 CASE 语句对实例求和。这是您可以在 SQL Server 上的会话中运行的示例:
IF OBJECT_ID('TEMPDB..#TEMP') IS NOT NULL
DROP TABLE #TEMP
CREATE TABLE #TEMP(
WellType NVARCHAR(10)
,EventDate DATE
)
INSERT INTO #TEMP (WellType, EventDate)
VALUES ('OW','2021-11-03')
,('GW','2020-11-03')
,('D','2019-11-03')
,('OWI','2018-11-03')
,('WI','2017-11-03')
,('WI','2021-11-03')
,('D','2020-11-03')
,('D','2019-11-03')
,('GW','2018-11-03')
,('OW','2017-11-03')
,('OW','2021-11-03')
,('GW','2020-11-03')
,('D','2019-11-03')
,('OWI','2018-11-03')
,('WI','2017-11-03')
,('WI','2021-11-03')
,('D','2020-11-03')
,('D','2019-11-03')
,('GW','2018-11-03')
,('OW','2017-11-03')
SELECT
WellType
,SUM(CASE WHEN YEAR(EventDate) = YEAR(GETDATE()) THEN 1 ELSE 0 END) [THIS YEAR]
,SUM(CASE WHEN YEAR(EventDate) = YEAR(DATEADD(YEAR,-1,GETDATE())) THEN 1 ELSE 0 END) [LAST YEAR]
,SUM(CASE WHEN YEAR(EventDate) = YEAR(DATEADD(YEAR,-2,GETDATE())) THEN 1 ELSE 0 END) [2 YEARS AGO]
,SUM(CASE WHEN YEAR(EventDate) = YEAR(DATEADD(YEAR,-3,GETDATE())) THEN 1 ELSE 0 END) [3 YEARS AGO]
FROM #TEMP
GROUP BY WellType
我还使用 GETDATE() 函数来确定要求和的年份。这应该做你想要的。
推荐阅读
- machine-learning - 将 NLP 转换为 SQL 的方法有哪些?
- python - 检查矩阵中其他值的对角线值的问题。(Python)
- django - 将apps.py编辑为信号后,信号出现Django AppRegistryNotReady错误
- mysql - SQL - 加入 3 表查询
- php - 如何将 PHP 变量放到重定向页面上
- plugins - DITA-OT,使用自定义插件返回静态错误
- python - 抓取 html 表以获取信息(python)
- qt - QML - TableViewColumn 快速控制 1 警报“模型大小 -2 小于 0”
- api - 我可以说用usb传输数据是API吗?
- reactjs - 状态中未定义的 React Props(在构造函数内部)仅在渲染方法中可用