【发布时间】:2021-12-18 06:30:05
【问题描述】:
我有一个查询,显示当年的井数。我想显示过去 5 年的计数/年。我怎么能在一个查询中做到这一点?
今年,我使用的是YEAR(GETDATE())。在过去的五年里,我一直在想我可以使用:YEAR(GETDATE())-1、YEAR(GETDATE())-2、YEAR(GETDATE())-23 等。我还认为CASE WHEN 子句可以工作,但不确定如何在@987654330 下使用它@ 声明。
这是我当前的查询:
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
这是我目前的结果:
| WellTypes | 2021 |
|---|---|
| WI | 10 |
| OWI | 1 |
| D | 21 |
| GW | 40 |
| OW | 72 |
| Totals | 144 |
这是我想要的:
| WellTypes | 2021 | 2020 | 2019 | 2018 | 2017 |
|---|---|---|---|---|---|
| WI | 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 |
| Totals | 144 | 15 | 7 | 14 | 18 |
我正在努力在 db-fiddle 中使用它,但我以前从未使用过它。我知道这很长,但现在,这是表格中的纯数据。 “EventDate”、“Comment”和“Event”列来自名为“ConstructDate”的表。 “WellType”列来自名为“Well”的表。
| EventDate | WellType | Comment | Event |
|---|---|---|---|
| 1/2/2017 | OW | PA | LATERALSTATUS |
| 1/3/2017 | OW | PA | LATERALSTATUS |
| 1/3/2017 | OW | PA | LATERALSTATUS |
| 1/3/2017 | OW | PA | LATERALSTATUS |
| 1/3/2017 | WI | PA | LATERALSTATUS |
| 1/3/2017 | WI | PA | LATERALSTATUS |
| 1/3/2017 | OWI | PA | LATERALSTATUS |
| 1/3/2017 | OWI | PA | LATERALSTATUS |
| 1/3/2017 | OWI | PA | LATERALSTATUS |
| 1/3/2017 | OWI | PA | LATERALSTATUS |
| 1/3/2017 | OWI | PA | LATERALSTATUS |
| 1/4/2017 | GW | PA | LATERALSTATUS |
| 1/4/2017 | GW | PA | LATERALSTATUS |
| 1/5/2017 | GW | PA | LATERALSTATUS |
| 1/5/2017 | GW | PA | LATERALSTATUS |
| 1/5/2017 | GW | PA | LATERALSTATUS |
| 1/5/2017 | GW | PA | LATERALSTATUS |
| 1/5/2017 | GW | PA | LATERALSTATUS |
| 1/1/2018 | WI | PA | LATERALSTATUS |
| 1/2/2018 | WI | PA | LATERALSTATUS |
| 1/2/2018 | WI | PA | LATERALSTATUS |
| 1/2/2018 | WI | PA | LATERALSTATUS |
| 1/2/2018 | WI | PA | LATERALSTATUS |
| 1/2/2018 | OWI | PA | LATERALSTATUS |
| 1/2/2018 | OWI | PA | LATERALSTATUS |
| 1/2/2018 | OWI | PA | LATERALSTATUS |
| 1/2/2018 | OWI | PA | LATERALSTATUS |
| 1/2/2018 | OWI | PA | LATERALSTATUS |
| 1/2/2018 | OWI | PA | LATERALSTATUS |
| 1/2/2018 | D | PA | LATERALSTATUS |
| 1/2/2018 | D | PA | LATERALSTATUS |
| 1/2/2018 | OW | PA | LATERALSTATUS |
| 1/2/2018 | OW | PA | LATERALSTATUS |
| 1/2/2018 | OW | PA | LATERALSTATUS |
| 1/2/2019 | OWI | PA | LATERALSTATUS |
| 1/2/2019 | OWI | PA | LATERALSTATUS |
| 1/2/2019 | OWI | PA | LATERALSTATUS |
| 1/2/2019 | GW | PA | LATERALSTATUS |
| 1/2/2019 | GW | PA | LATERALSTATUS |
| 1/2/2019 | OW | PA | LATERALSTATUS |
| 1/2/2019 | OW | PA | LATERALSTATUS |
| 1/1/2020 | WI | PA | LATERALSTATUS |
| 1/2/2020 | WI | PA | LATERALSTATUS |
| 1/2/2020 | WI | PA | LATERALSTATUS |
| 1/2/2020 | WI | PA | LATERALSTATUS |
| 1/2/2020 | WI | PA | LATERALSTATUS |
| 1/2/2020 | WI | PA | LATERALSTATUS |
| 1/2/2020 | OWI | PA | LATERALSTATUS |
| 1/2/2020 | OWI | PA | LATERALSTATUS |
| 1/2/2020 | GW | PA | LATERALSTATUS |
| 1/2/2020 | GW | PA | LATERALSTATUS |
| 1/2/2020 | GW | PA | LATERALSTATUS |
| 1/2/2020 | GW | PA | LATERALSTATUS |
| 1/2/2020 | GW | PA | LATERALSTATUS |
| 1/2/2020 | GW | PA | LATERALSTATUS |
| 1/2/2020 | OW | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | WI | PA | LATERALSTATUS |
| 8/16/2021 | OWI | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | D | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/16/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/18/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | GW | PA | LATERALSTATUS |
| 8/17/2021 | OW | PA | LATERALSTATUS |
| 8/17/2021 | OW | PA | LATERALSTATUS |
| 8/18/2021 | OW | PA | LATERALSTATUS |
| 8/18/2021 | OW | PA | LATERALSTATUS |
| 8/18/2021 | OW | PA | LATERALSTATUS |
| 8/19/2021 | OW | PA | LATERALSTATUS |
| 8/19/2021 | OW | PA | LATERALSTATUS |
| 8/19/2021 | OW | PA | LATERALSTATUS |
| 8/19/2021 | OW | PA | LATERALSTATUS |
| 8/19/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/20/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/21/2021 | OW | PA | LATERALSTATUS |
| 8/22/2021 | OW | PA | LATERALSTATUS |
| 8/22/2021 | OW | PA | LATERALSTATUS |
| 8/23/2021 | OW | PA | LATERALSTATUS |
| 8/23/2021 | OW | PA | LATERALSTATUS |
| 8/23/2021 | OW | PA | LATERALSTATUS |
| 8/23/2021 | OW | PA | LATERALSTATUS |
| 8/23/2021 | OW | PA | LATERALSTATUS |
| 8/23/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
| 8/24/2021 | OW | PA | LATERALSTATUS |
【问题讨论】:
-
您能否将示例数据包含在您的预期结果中 - 最好是 DB<>Fiddle 或作为您问题中的文本。
-
@Stu 预期的数据已经组成。让我看看我能不能把东西放在一起。它基本上是两列数据:一列显示日期,另一列显示井类型。
-
旁白:
WHERE YEAR(cd.EventDate) = YEAR(GETDATE())效率低,因为列上的函数(不能使用索引),最好使用WHERE cd.EventDate >= DATEFROMPARTS(YEAR(GETDATE()) -4, 1, 1)。由于WHERE子句,您的左连接变为内连接。而不是COALESCE(w.WellType, 'Totals'),最好使用CASE WHEN GROUPING(w.WellType) = 0 THEN w.WellType ELSE 'Totals' END。您不应该使用''单引号来分隔列名,而是使用[] -
@Charlieface 为什么使用
CASE WHEN GROUPING(w.WellType) = 0 THEN w.WellType ELSE 'Totals' END而不是COALESCE(w.WellType, 'Totals')? -
主要是因为如果
WellType也可以为null,那么会有两个空行,一个用于nul,一个用于总数。它也使意图更清晰
标签: sql sql-server tsql count sql-server-2012