找文章 / 找答案
精选问答 更多内容

[数据处理] 求个SQL语句,感谢。

yhdata_zfYQk03B白银二 来自手机 显示全部楼层 发表于 2022-2-17 14:38:44 |阅读模式 打印 上一主题 下一主题
1
已解决

【数据处理】 求个SQL语句,感谢。

2340 10
黄颜色4列是想通过SQL计算出来的。
逻辑:
判断:IF(当前指令的状态出现S和G,"未开工",if(当前指令的状态出现B和C,"未完成","已完成"   
计算当前指令下B、C状态个数   
计算当前指令下A、D状态个数   
计算当前指令下除B、C、A、D状态以外状态的个数  

最佳答案

永洪社区YVP
美滋滋 白银二 关注Ta

2022-02-17 14:38:45

再给你一个写法供参考。 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 ...
查看完整内容
回复

使用道具 举报

精彩评论10

美滋滋白银二 显示全部楼层 发表于 2022-2-17 14:38:45
再给你一个写法供参考。
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:51
数据如图片。
IMG_20220217_143223.jpg
回复

使用道具 举报

永洪tech-Bella白银一 显示全部楼层 发表于 2022-2-17 14:43:01

稍等,咱们先看下
回复

使用道具 举报

永洪tech-Bella白银一 显示全部楼层 发表于 2022-2-17 17:29:43

这个逻辑跟咱们上一个帖子类似,还是按照之前类似的逻辑写就可以,要完整的sql的话,建议是联系数据库dba
https://club.yonghongtech.com/thread-17850-1-1.html
回复

使用道具 举报

yhdata_zfYQk03B白银二 来自手机 显示全部楼层 发表于 2022-2-18 15:42:53
实是写不出来,烦请帮忙看。
回复

使用道具 举报

美滋滋白银二 显示全部楼层 发表于 2022-2-18 15:56:51
1.你的图片不是很清晰。
2.你描述的需求不是很详细,我没有太看明白。
【判断:IF(当前指令的状态出现S和G,"未开工",if(当前指令的状态出现B和C,"未完成","已完成" 】  
  就是这句话,我没有完全理解。
回复

使用道具 举报

美滋滋白银二 显示全部楼层 发表于 2022-2-18 16:21:55
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
SQL.png

回复

使用道具 举报

美滋滋白银二 显示全部楼层 发表于 2022-2-18 16:30:01
上面的例子是基于MYSQL数据库写的,不同的数据库写法略有不同,自己看着思路修改一下吧
回复

使用道具 举报

yhdata_zfYQk03B白银二 来自手机 显示全部楼层 发表于 2022-2-19 14:20:35
感谢感谢,{:46:}
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部