永洪社区
标题: 求个SQL语句,感谢。 [打印本页]
作者: yhdata_zfYQk03B 时间: 2022-2-17 14:38
标题: 求个SQL语句,感谢。
黄颜色4列是想通过SQL计算出来的。
逻辑:
判断:IF(当前指令的状态出现S和G,"未开工",if(当前指令的状态出现B和C,"未完成","已完成"
计算当前指令下B、C状态个数
计算当前指令下A、D状态个数
计算当前指令下除B、C、A、D状态以外状态的个数
作者: 美滋滋 时间: 2022-2-17 14:38
再给你一个写法供参考。
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
作者: yhdata_zfYQk03B 时间: 2022-2-17 14:39
数据如图片。
作者: 永洪tech-Bella 时间: 2022-2-17 14:43
稍等,咱们先看下
作者: 永洪tech-Bella 时间: 2022-2-17 17:29
这个逻辑跟咱们上一个帖子类似,还是按照之前类似的逻辑写就可以,要完整的sql的话,建议是联系数据库dba
https://club.yonghongtech.com/thread-17850-1-1.html
作者: yhdata_zfYQk03B 时间: 2022-2-18 15:42
实是写不出来,烦请帮忙看。
作者: 美滋滋 时间: 2022-2-18 15:56
1.你的图片不是很清晰。
2.你描述的需求不是很详细,我没有太看明白。
【判断:IF(当前指令的状态出现S和G,"未开工",if(当前指令的状态出现B和C,"未完成","已完成" 】
就是这句话,我没有完全理解。
作者: 美滋滋 时间: 2022-2-18 16:21
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
(, 下载次数: 121)