该表具有“Sales_Order_ID”、“Sales_Order_Line_Number”和“Sales_Order_Line_staus”等字段。我想检索“Sales_Order_ID”,其中“Sales_Order_ID”的每条记录都具有相同的“Sales_Order_Line_Status”。
因此,如果销售订单 X 的每条记录的状态均为“已关闭”,那么我想检索它。如果销售订单 Y 有 3 条状态为“已关闭”的记录和 1 条状态为“打开”的记录,那么我不想检索它。
我尝试过:
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
没有成功。
然后我完全变成了菜鸟,改变了连接类型,只是希望它能起作用。我是在接近这里还是完全以错误的方式进行?
此外,我意识到上面的查询不会将结果限制为“关闭”状态,但我想如果我可以获得一个仅返回所有相同状态行的查询,那么我就可以将它们限制为“关闭”。
抱歉,如果不清楚!如果是这样,我会尽力澄清。
最佳答案
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'
关于sql - 如何获取销售订单的每一行都已关闭的销售订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101631/