加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 数据库 > MsSql > 正文

sql – 如何获得销售订单的每一行都已关闭的销售订单?

发布时间:2021-03-30 18:48:26 所属栏目:MsSql 来源:互联网
导读:该表在其他字段中具有“Sales_Order_ID”,“Sales_Order_Line_Number”和“Sales_Order_Line_staus”.我想检索’Sales_Order_ID’,其中’Sales_Order_ID’的每条记录都具有相同的’Sales_Order_Line_Status’. 因此,如果销售订单X的每条记录都具有“已关闭”

该表在其他字段中具有“Sales_Order_ID”,“Sales_Order_Line_Number”和“Sales_Order_Line_staus”.我想检索’Sales_Order_ID’,其中’Sales_Order_ID’的每条记录都具有相同的’Sales_Order_Line_Status’.

因此,如果销售订单X的每条记录都具有“已关闭”状态,那么我想要检索它.如果销售订单Y有三个状态为“已关闭”的记录和一个状态为“已打开”的记录,则我不想检索它.

我试过了:

SELECT DISTINCT s1.so_ID,s1.SO_line_status
FROM sales_order_table s1
INNER JOIN sales_order_table s2
ON s1.so_id = s2.so_id
  AND s1.so_line_status = s2.so_line_status
ORDER BY s1.so_id

没有成功.以下似乎与我想要的相反:

SELECT DISTINCT s1.so_ID,s1.SO_line_status
FROM sales_order_table s1
INNER JOIN sales_order_table s2
ON s1.so_id = s2.so_id
  AND s1.so_line_status <> s2.so_line_status
ORDER BY s1.so_id

所以我尝试过:

SELECT DISTINCT s1.so_ID,s1.SO_line_status
FROM sales_order_table s1
INNER JOIN sales_order_table s2
ON s1.so_id = s2.so_id
  AND NOT s1.so_line_status <> s2.so_line_status
ORDER BY s1.so_id

没有成功.

然后我去了完全noob并改变了连接类型只是希望它能工作.我是在这里关闭还是完全以错误的方式进行?

此外,我意识到上面的查询不会将结果限制为“已关闭”状态,但我想如果我能得到一个只返回所有相同状态行的结果,那么我可以将它们限制为“已关闭”.

对不起,如果不清楚的话!如果是这样,我会尽力澄清.

解决方法

SELECT so_ID
FROM sales_order_table 
GROUP BY so_ID
HAVING MAX(SO_line_status) = 'Closed' AND
       MIN(SO_line_status) = 'Closed' AND
       COUNT(CASE WHEN SO_line_status IS NULL THEN 1 END) = 0

如果您的RDBMS支持,您也可以使用EXCEPT

SELECT so_ID
FROM sales_order_table 
WHERE SO_line_status = 'Closed'
EXCEPT
SELECT so_ID
FROM sales_order_table 
WHERE SO_line_status IS NULL OR SO_line_status <> 'Closed'

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读