如何在同一张表上计算不同结果的计数[重复]
Posted
技术标签:
【中文标题】如何在同一张表上计算不同结果的计数[重复]【英文标题】:How to get count for different results on same table [duplicate] 【发布时间】:2019-06-03 07:08:30 【问题描述】:我有一组查询代表来自不同系统日期(过去 5、7 和 30 天)的数据。
我的疑问是如何在查询中表达这导致了这个问题:
STATE | 5 DAYS | 7 DAYS | 30 DAYS
---------------------------------
INIT | 1 | 1 | 2
---------------------------------
SECN | 2 | 2 | 2
注意:这是来自考虑不同系统日期的单个表
注意2:查询示例如下
select
CASE WHEN STATUS = 'INI' then 'Initial'
WHEN STATUS = 'SECN' the 'Second'
END 'Status', count(*)
from db.FilesTable
where 1=1
and DAT_Files >= DATEADD(day,-5,GETDATE())
【问题讨论】:
您能否向我们展示您的查询的简化版本? 我不明白你想在这里问什么。样本数据和预期结果将在这里真正有所帮助。您尝试自己解决什么问题(发布您的 SQL 尝试)。我怀疑这是一个条件聚合问题(类似于COUNT(CASE WHEN Column <= 5 THEN 1 END) AS Count5
)。
我已经用基本查询编辑了问题
【参考方案1】:
我认为您可以编写这种类型的查询:
SELECT State,
SUM (CASE WHEN ColA < 6 THEN 1 ELSE 0 END) AS '5 Days',
SUM (CASE WHEN ColA IN (6, 7) THEN 1 ELSE 0 END) AS '7 Days',
SUM (CASE WHEN ColA > 7 AND ColA < 31 THEN 1 ELSE 0 END) AS '30 Days'
FROM TableA
显然你可能想要调整一些东西,但这给出了一些方向。
【讨论】:
没有看到 OP 的数据,你怎么能确定这个查询甚至可以在这里工作? @TimBiegeleisen 绝对不确定,只是试一试。我们会从这里看到它把我们带到哪里。 我已经用基本查询编辑了问题【参考方案2】:仅当特定条件发生时才使用条件聚合对记录进行计数。 CASE
将在聚合发生之前计算,因此您可以将任何表达式放在任何列上。
select
State = T.Status,
[5 Days] = COUNT(CASE WHEN T.DAT_Files >= DATEADD(day, -5, GETDATE()) THEN 1 END),
[7 Days] = COUNT(CASE WHEN T.DAT_Files >= DATEADD(day, -7, GETDATE()) THEN 1 END),
[30 Days] = COUNT(1)
from
db.FilesTable AS T
where
T.Status IN ('INI', 'SECN') AND
DAT_Files >= DATEADD(day, -30, GETDATE()) -- Biggest period filter here
GROUP BY
T.Status
【讨论】:
它工作。谢谢以上是关于如何在同一张表上计算不同结果的计数[重复]的主要内容,如果未能解决你的问题,请参考以下文章