Jun*_*Dev 6 sql t-sql sql-server
我有一张看起来像这样的桌子
每个[订单号]可以有1个或多个[行号],每个[行号]可以具有[SHIPPED]或[UNSHIPPED]状态.
我想选择所有[订单号],其中包含[线号]同时包含[运输]和[未运输].
例如,这些[订单号]包含[行号]同时[SHIPPED]和[UNSHIPPED],因此应该选择它
这是我的查询但它没有返回正确的结果
SELECT [Order number], [Line number], [SHIPPED/UNSHIPPED]
FROM [mytable]
WHERE [Order number] IN (SELECT [Order number]
FROM [mytable]
GROUP BY [Order number]
HAVING COUNT(*) > 1)
ORDER BY [Order number], [Line number]
Run Code Online (Sandbox Code Playgroud)
请问我的查询中缺少什么?谢谢.
这是一种方法:
WITH cte AS (
SELECT [Order number]
FROM mytable
WHERE [SHIPPED/UNSHIPPED] IN ('SHIPPED', 'UNSHIPPED')
GROUP BY [Order number]
HAVING COUNT(DISTINCT [SHIPPED/UNSHIPPED]) = 2
)
SELECT *
FROM mytable
WHERE [Order number] IN (SELECT [Order number] FROM cte);
Run Code Online (Sandbox Code Playgroud)
CTE 查找所有具有已发货和未发货记录的订单号。它的工作原理是首先将给定订单的记录限制为仅包含已发货/未发货的订单,然后断言该组的不同计数为 2,这意味着两种类型的发货都存在。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |