我有一个包含大量列和行的表,如下例所示:
我正在尝试查找部分完成的订单,这样订单中至少有一条Item Line
记录的Goods Issue Date
值且 不的订单的一个Item Line
记录具有Goods Issue Date
值。我可以很容易地获得没有发货日期的订单,但我需要知道订单中有一些带有日期的项目行,有些则没有。
查看上面的示例数据,我只能看到订单#1的结果,因为订单2,3和5都已完全完成,订单4尚未启动。
答案 0 :(得分:1)
SELECT
*
FROM
theTable t1
WHERE
t1.`Goods Issue Date` IS NULL
AND EXISTS ( SELECT
*
FROM
theTable t2
WHERE
t2.`Order` = t1.`Order`
AND t2.`Goods Issue Date` IS NOT NULL );
如果IN
不可为空,您也可以使用简单的Order
SELECT *
FROM theTable
WHERE `Goods Issue Date` IS NULL
AND `Order` IN (
SELECT `Order`
FROM theTable
WHERE `Goods Issue Date` IS NOT NULL
)
答案 1 :(得分:0)
首先需要识别坏订单。为了便于阅读,我在这里用CTE(公用表表达式)完成了这个操作,但是可以在join语句中使用一个简单的子查询来完成。
完成后,只需将结果重新加入父表即可。
WITH BadOrders AS (
SELECT *
FROM table
WHERE [Goods Issue Date] IS NULL)
SELECT table.*
FROM table
JOIN BadOrders ON table.Order = BadOrders.Order