2015-12-23 41 views
0

我有很多列和行的表,如下面的例子:SQL查詢,檢查是否與A列中的值相同的細胞具有在列B中的相同的值

Example table for query

我「M試圖找到已部分完成的訂單,使得存在對於確實有Goods Issue Date一個Item Line記錄,做Goods Issue Date值的訂單的訂貨至少一個Item Line記錄。我可以輕鬆獲得沒有發貨日期的訂單,但我需要知道具有某個日期和某些沒有日期的項目行的訂單。

看看上面的樣本數據,我應該只看到訂單#1的結果,因爲訂單2,3和5都全部完成,而且訂單4還沒有開始。

+0

您好,歡迎計算器!是否有可能發佈迄今爲止嘗試過的內容? –

+0

發佈圖像代替代碼或樣本數據在這裏被認爲是粗魯的。這讓我們難以幫助您,因爲我們必須重新鍵入您的樣本以自行嘗試,並導致降價。 –

+0

此外,您不清楚您期待的結果。你是否想要訂單#1的所有記錄和列,是否只需要訂單1的一條記錄?也許只是訂單中的不完整的行? –

回答

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); 

DEMO

你也可以使用一個簡單的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 
     ) 
+0

Oh woaw非常感謝你JamieD77!我會讀一點關於「EXISTS」並結合兩個選擇像你一樣!感謝您的快速回復,這對我有很大的幫助。 –

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 
相關問題