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

前端之家收集整理的这篇文章主要介绍了sql – 如何获得销售订单的每一行都已关闭的销售订单?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
该表在其他字段中具有“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'
原文链接:https://www.f2er.com/mssql/74875.html

猜你在找的MsSQL相关文章