该表在其他字段中具有“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'