多个语句的 SQL 多次计数赢得不同的列
Posted
技术标签:
【中文标题】多个语句的 SQL 多次计数赢得不同的列【英文标题】:SQL multiple counts with multiple statements win different columns 【发布时间】:2020-04-20 14:44:27 【问题描述】:我正在寻找一种使用一个查询从表中获取多个计数的方法。我想获取使用特定终端以及授予状态的每个 USER_level(只有 3 个)的总数
表格
CARD TERMINAL TRANSIT_DATE STATUS STR_DIRECTION USER_Level
12 D1 2019-12-02 07:12:30.000 Granted Exit level1
10 D1 2019-12-02 13:22:29.000 Granted Exit level3
11 D2 2019-12-02 17:09:05.000 Granted Exit level1
17 D2 2019-12-03 09:58:22.000 deny Entry level2
19 D3 2019-12-03 12:17:29.000 Granted Entry level2
32 D3 2019-12-03 13:48:33.000 Granted Exit level1
20 D2 2019-12-04 10:36:22.000 Granted Exit level3
11 D3 2019-12-07 22:01:41.000 Granted Exit level1
15 D2 2019-12-09 11:12:16.000 Granted Exit level2
14 D3 2019-12-10 06:32:22.000 Granted Entry level2
12 D2 2019-12-10 10:31:26.000 Granted Exit level1
39 D2 2019-12-11 06:42:08.000 Granted Exit level3
12 D2 2019-12-11 09:32:13.000 Granted Exit level1
11 D3 2019-12-11 12:44:36.000 Granted Exit level2
56 D2 2019-12-12 06:48:33.000 Granted Exit level2
78 D2 2019-12-12 12:03:23.000 Granted Entry level1
66 D3 2019-12-10 12:16:54.000 Granted Exit level3
22 D2 2019-12-09 16:02:02.000 Granted Exit level1
示例看起来像这样的结果
TERMINAL level 1 level 2 level 3
D1 1 1
D2 6 2 2
D3 2 3 1
...
【问题讨论】:
mysql 和 SQL Server 是完全不同的 RDBMS,您真正使用的是什么?您尝试了哪些方法,为什么没有成功? 正确标记您的问题! 【参考方案1】:您可以尝试这样的操作,注意如果存在更多终端,您必须将它们添加到查询中。
select terminal,
sum(case when user_level = 'level1' then 1 else 0 end) as level1,
sum(case when user_level = 'level2' then 1 else 0 end) as level2,
sum(case when user_level = 'level3' then 1 else 0 end) as level3
from yourTable
where status = 'Granted'
and transit_date > your_initial_date
group by terminal
希望对你有帮助!
【讨论】:
以上是关于多个语句的 SQL 多次计数赢得不同的列的主要内容,如果未能解决你的问题,请参考以下文章