首页 > 解决方案 > SQL 一个字段计数其他字段的聚合

问题描述

无论任何标准如何,我都需要计算单元总数,还要标记在给定日期完成 3 个以上工作单元的人。

这是一个示例表和伪代码:

DATE|PERSON|JOB_NO
1/1/2020 | M | 01
1/1/2020 | M | 02
1/1/2020 | N | 03
1/1/2020 | M | 04

伪代码:

SELECT DATE, COUNT(ALL UNITS), COUNT(DISTINCT PERSON WHERE PERSON DID MORE THAN 3+ UNITS)
FROM DB
GROUP BY DATE

因此,从表中 M 做了 3 份工作,所以他们算在内,但 N 做了 1 份工作,所以他们没有得到:

1/1/2020 | 4 | 1

标签: sqlsql-servergroup-by

解决方案


我想有人已经正确回答了这个问题,但你去吧

drop  table #tmp

create table #tmp
    (
        [date] date
        , person char(1)
        , jobno int
    );

insert into #tmp
( date, person, jobno )
values ('1/1/2020', 'm',1), ('1/1/2020', 'm',2), ('1/1/2020', 'n',1), ('1/1/2020', 'm',3)

SELECT
    DATE,
    COUNT(*),
    (SELECT COUNT(distinct person) FROM #tmp GROUP BY person, date HAVING COUNT(*)>=3)
FROM #tmp
GROUP BY DATE

推荐阅读