再给你一个写法供参考。
SELECT
A.test1,
A.test2,
CASE WHEN B.SGCNT > 0 THEN '未开工'
ELSE CASE WHEN B.BCCNT > 0 THEN '未完成'
ELSE '已完成' END
END AS "状态" ,
B.BCCNT AS 'BC个数',
B.ADCNT AS 'AD个数',
B.NOT_ABCDCNT AS 'ABCD以外个数'
FROM test A
LEFT JOIN (
select test1,
sum(case when test2 in ('S','G') then 1 ELSE 0 END) AS SGCNT,
sum(case when test2 IN ('B','C') then 1 ...
再给你一个写法供参考。
SELECT
A.test1,
A.test2,
CASE WHEN B.SGCNT > 0 THEN '未开工'
ELSE CASE WHEN B.BCCNT > 0 THEN '未完成'
ELSE '已完成' END
END AS "状态" ,
B.BCCNT AS 'BC个数',
B.ADCNT AS 'AD个数',
B.NOT_ABCDCNT AS 'ABCD以外个数'
FROM test A
LEFT JOIN (
select test1,
sum(case when test2 in ('S','G') then 1 ELSE 0 END) AS SGCNT,
sum(case when test2 IN ('B','C') then 1 ELSE 0 END) AS BCCNT,
sum(case when test2 IN ('A','D') then 1 ELSE 0 END) AS ADCNT,
sum(case when test2 not IN ('A','B','C','D') then 1 ELSE 0 END) AS NOT_ABCDCNT
FROM test
group by test1
) B
ON A.test1 = B.test1
SELECT
A.test1,
A.test2,
CASE WHEN IFNULL(B.cnt,0) > 0 THEN '未开工'
else case when IFNULL(C.cnt,0) > 0 THEN '未完成'
else '已完成' end
END AS "状态" ,
IFNULL(C.cnt,0) AS 'BC个数',
IFNULL(D.cnt,0) AS 'AD个数',
IFNULL(E.cnt,0) AS 'ABCD以外个数'
FROM
test A
LEFT JOIN ( SELECT test1, count( 1 ) cnt FROM test WHERE test2 IN ( 'S', 'G' ) GROUP BY test1 ) B ON A.test1 = B.test1
LEFT JOIN ( SELECT test1, count( 1 ) cnt FROM test WHERE test2 IN ( 'B', 'C' ) GROUP BY test1 ) C ON A.test1 = C.test1
LEFT JOIN ( SELECT test1, count( 1 ) cnt FROM test WHERE test2 IN ( 'A', 'D' ) GROUP BY test1 ) D ON A.test1 = D.test1
LEFT JOIN ( SELECT test1, count( 1 ) cnt FROM test WHERE test2 NOT IN ( 'A','B','C','D' ) GROUP BY test1 ) E ON A.test1 = E.test1