同一个订单号同一个线体对应一个两个状态只取处理中的状态要怎么写

image.png

SQL ccc1234 发布于 2023-9-13 14:43
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
坚定的小帆薯Lv6高级互助
发布于2023-9-13 14:48

赋值,分组求max即可

按照生成订单、线体进行group by,赋值状态,处理中为2,已完成为1

然后进行max,在还原即可

具体写法看你数据库

最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-9-13 14:45(编辑于 2023-9-13 15:12)

mysql?oracle?SqlServer?

--------

with test as(

SELECT '1' [订单号],'S1' [线体],'处理中' [总状态]

union ALL

SELECT '2' [订单号],'S2' [线体],'已完成' [总状态]

union ALL

SELECT '3' [订单号],'S3' [线体],'处理中' [总状态]

union ALL

SELECT '3' [订单号],'S3' [线体],'已完成' [总状态]

union ALL

SELECT '4' [订单号],'S4' [线体],'已完成' [总状态]

union ALL

SELECT '4' [订单号],'S4' [线体],'已完成' [总状态]

),

t as (

SELECT *,ROW_NUMBER() OVER(PARTITION BY 订单号,线体 ORDER BY 总状态 ASC) [I] FROM TEST

)

SELECT * FROM T WHERE 1=1 AND NOT EXISTS(SELECT T1.订单号 FROM T T1 WHERE T1.订单号=T.订单号 AND T1.线体=T.线体 AND T1.I>1 )

UNION ALL

SELECT * FROM T WHERE 1=1 AND EXISTS(SELECT T1.订单号 FROM T T1 WHERE T1.订单号=T.订单号 AND T1.线体=T.线体 AND T1.I>1 ) and 总状态='处理中'

image.png

  • ccc1234 ccc1234(提问者) SqlServer
    2023-09-13 14:48 
  • Z4u3z1 Z4u3z1 回复 ccc1234(提问者) 参考SQL补充在上面了
    2023-09-13 15:12 
最佳回答
0
Li XiaolongLv4见习互助
发布于2023-9-13 14:49

用case when 根据生产订单号分组,如果count(生产订单号)>1,则状态=处理中

  • 3关注人数
  • 140浏览人数
  • 最后回答于:2023-9-13 15:12
    请选择关闭问题的原因
    确定 取消
    返回顶部