2015-04-01 232 views
0

我現在有一個SQL查詢的設置,但我希望它忽略0的在min_on_hand列值,而我似乎無法找出爲什麼這不起作用SQL與左連接顯示爲0的

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM 
    [FCI].dbo.[sku_master] 
LEFT JOIN 
    (SELECT 
     sku_master.sku, 
     sum(location_inventory.qty_on_hand) as total_qty_on_hand 
    FROM 
     [FCI].[dbo].[location_inventory] 
    JOIN 
     [FCI].dbo.[sku_master] ON location_inventory.sku = sku_master.sku 
    WHERE 
     sku_master.min_on_hand > 0 
    GROUP BY 
     sku_master.sku) x ON sku_master.sku = x.sku; 
+0

你的意思是你不希望顯示與min_on_hand =記錄0? – RezaRahmati 2015-04-01 13:23:39

+2

它看起來像你的唯一的左連接,如果他們是> 0,而不是過濾最終結果。您可以嘗試一個INNER JOIN,或者將WHERE子句放在原始查詢上,而不是嵌套的SELECT。 – 2015-04-01 13:26:20

+2

您的WHERE sku_master.min_on_hand> 0在子查詢中。它應該在主查詢中嗎? – LeeG 2015-04-01 13:26:31

回答

1

正如其他人在評論中提到的,在子查詢中過濾min_on_hand沒有任何影響 - 您仍然會返回sku_master中的值,但它們不會包含來自x的任何數據。

如果將檢查主查詢,那麼你將不會看到任何記錄,其中min_on_hand = 0

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM 
    [FCI].dbo.[sku_master] 
LEFT JOIN 
    (SELECT 
     sku_master.sku, 
     sum(location_inventory.qty_on_hand) as total_qty_on_hand 
    FROM 
     [FCI].[dbo].[location_inventory] 
    JOIN 
     [FCI].dbo.[sku_master] ON location_inventory.sku = sku_master.sku 
    GROUP BY 
     sku_master.sku) x ON sku_master.sku = x.sku 
WHERE 
    sku_master.min_on_hand > 0 
0
SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM 
    [FCI].dbo.[sku_master] 
LEFT JOIN 
    (SELECT 
     sku_master.sku, 
     sum(location_inventory.qty_on_hand) as total_qty_on_hand 
    FROM 
     [FCI].[dbo].[location_inventory] 
    JOIN 
     [FCI].dbo.[sku_master] ON location_inventory.sku = sku_master.sku 
    GROUP BY 
     sku_master.sku) x ON sku_master.sku = x.sku; 
    WHERE 
     sku_master.min_on_hand > 0 

移動WHERE固定問題的聲明的結尾。

0

你有一個正確的答案,但爲什麼在派生表

SELECT 
    sku_master.sku, 
    sku_master.description, 
    sku_master.min_on_hand, 
    sku_master.max_on_hand, 
    x.total_qty_on_hand 
FROM [FCI].dbo.[sku_master] 
LEFT JOIN (SELECT sku, 
        sum(qty_on_hand) as total_qty_on_hand 
       FROM [FCI].[dbo].[location_inventory] 
       GROUP BY sku) x 
    ON sku_master.sku = x.sku 
WHERE sku_master.min_on_hand > 0 
+0

因爲我是新的,這就是我的想法:) – eternityhq 2015-04-01 14:02:37

0

我用這個查詢的加入。它返回庫存摘要,對於庫存量的最低需要超過所有記錄0

`/ * LEFT JOIN sku_master */

SELECT  sku_master.sku, sku_master.description, sku_master.min_on_hand, 
        sku_master.max_on_hand, 
        location_inventory.qty_on_hand AS total_qty_on_hand 
    FROM   sku_master LEFT OUTER JOIN location_inventory 
        ON sku_master.sku = location_inventory.sku 
    GROUP BY sku_master.sku, sku_master.description, 
        sku_master.min_on_hand, sku_master.max_on_hand, 
        location_inventory.qty_on_hand 
    HAVING  (sku_master.min_on_hand > 0)`