多个语句的 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 多次计数赢得不同的列的主要内容,如果未能解决你的问题,请参考以下文章

组合不同(冗长)SQL 语句的列的最简单方法 - MSSQL

如何让多个不同的SQL语句一起执行?

sql 请教update语句in多个值时,进行多次更新

同一个 SQL 语句中的多个条件计数 [重复]

SQLPlus - 跨多个表的计数函数

如何使用多个 for 循环在 php 中创建 sql 语句