SQL Server 如何按多个列和结果分组

j2datikz  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(125)

我想知道的结果是,我有一个这样的表:

(DAY 9)

+---------+----------+--------------------+
| Subject | CLOSED   | UPDATE             |
+---------+----------+--------------------+
| SUB1    |        0 | 2008-11-11 13:23:44|
| SUB2    |        0 | 2008-11-11 13:23:44|
| SUB3    |        1 | 2008-11-09 13:23:44|
| SUB4    |        1 | 2008-11-09 13:23:44|
| SUB5    |        0 | 2008-11-11 13:23:44|
| SUB6    |        0 | 2008-11-10 13:23:44|
| SUB7    |        0 | 2008-11-10 13:23:44|
+---------+----------+--------------------+

每天都有一些寄存器被添加到这个表中,所以关闭的总数= 0(默认值)增加了,我有一个每天关闭一些寄存器的服务。

DAY 10

+---------+----------+--------------------+
| Subject | CLOSED   | UPDATE             |
+---------+----------+--------------------+
| SUB1    |        0 | 2008-11-11 13:23:44|
| SUB2    |        0 | 2008-11-11 13:23:44|
| SUB3    |        1 | 2008-11-09 13:23:44|
| SUB4    |        1 | 2008-11-09 13:23:44|
| SUB5    |        0 | 2008-11-11 13:23:44|
| SUB6    |        1 | 2008-11-10 13:23:44|
| SUB7    |        0 | 2008-11-13 13:23:44|
| SUB8    |        0 | 2008-11-13 13:23:44|
| SUB9    |        0 | 2008-11-14 13:23:44|
| SUB10   |        0 | 2008-11-15 13:23:44|
+---------+----------+--------------------+

等等。
我需要的是这样的结果

DAY | Total Modified (Closed = 1) | Total (Closed = 0)
09               2                          5
10               1                          7
11               3                          4
13               2                          2
14               1                          1
15               1                          0

到目前为止,我得到了这个解决方案

SELECT
DATEPART(DAY,UPDATE),
COUNT(*)
FROM TABLE1
GROUP BY (DATEPART(DAY,UPDATE))

我不知道如何做的是包括总列没有修改减少数量的修改最后一天考虑到当天的一些寄存器将被添加到这个表。

63lcw9qa

63lcw9qa1#

我很难将您的预期结果与示例数据进行匹配,但我认为您正在寻找条件聚合:

SELECT 
  [DAY]       = DATEPART(DAY, [UPDATE]),
  Modified    = SUM(CASE WHEN Closed = 1 THEN 1 ELSE 0 END),
  NotModified = SUM(CASE WHEN Closed = 0 THEN 1 ELSE 0 END)
FROM dbo.TABLE1
GROUP BY (DATEPART(DAY, [UPDATE]));

请注意,如果您的查询跨越了月份界限,DATEPART(DAY会产生误导。为什么不使用CONVERT(date, [UPDATE])

相关问题