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 有 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/

相关文章:

php - 从 ajax 调用中解析 JSON 数据

mysql - 子查询的自连接问题;想知道下面 2 个查询的区别

python - 使用 SQL 表达式通过 SQLAlchemy(和 MySQL)插入数据

sql - Postgresql并发索引

sql - Postgres Spring Data JPA 将列表作为值传递

sql - 通过使用sequelize 来对where 查询进行计数

sql - 您在 SQL Server 中做什么来创建或更改?

sql - Json_value 和 Json_query 找不到指定的路径

java - 处理海量数据表时应该如何使用Hibernate Mapping

java - 使用 JDBC 连接到 Oracle 会导致查询返回零行。