2017-08-03 154 views
1

其實我得到了我的輸出,但它部分。如何使用SQL Server使用左連接顯示左表中的所有記錄?

在我的左表我有所有的記錄,但是當我在右表中做過濾它不是從左表中把所有的記錄

+0

@Realcheeselord可以將其刪除你看,它只帶來右表的匹配記錄。它也沒有顯示來自左表的不匹配的記錄。我想帶來無與倫比的記錄 –

+1

@RealCheeseLord在這種情況下,你不需要一個問題,因爲你有一些叫做_Expecting output_ – Sami

+0

的可能重複[LEFT OUTER JOIN查詢不返回期望的行](https://stackoverflow.com/questions/14861927/left-outer-join-query-not-returning-expected-rows) –

回答

0

我覺得左加入到家店是你是什麼尋找:

from 
    ItemDynamic dynamics 
    inner join Store WITH(NOLOCK) on dynamics.StoreID = Store.ID and store.Inactive = 0 
    LEFT JOIN Item WITH(NOLOCK) on dynamics.ItemID = Item.ID and Item.ParentItem = 0 
    LEFT JOIN Sales idsp WITH(NOLOCK) on idsp.ItemID = Item.ID and Item.ParentItem = 0 and idsp.StoreID = dynamics.StoreID 
    and idsp.Time between '2017-07-16' and '2017-07-31' and idsp.StoreID <> 1001 and Item.ParentItem = 0 and Item.ItemType <> 9 
    LEFT JOIN Department WITH(NOLOCK) on Department.ID = Item.DepartmentID 
    LEFT JOIN Category WITH(NOLOCK) on Category.ID = item.CategoryID 
    LEFT JOIN Supplier WITH(NOLOCK) on Supplier.ID = item.SupplierID 
Where 
    item.ItemLookupCode = '100006C0005' and 
-- idsp.Time between '2017-07-16' and '2017-07-31' and idsp.StoreID <> 1001 and Item.ParentItem = 0 and Item.ItemType <> 9 

您可能需要添加在where子句

+0

我已經嘗試過你所提到的。它不 –

+0

意味着什麼之後你的輸出? –

+0

仍然輸出相同。 Actullay'Store和ItemDynamic'這兩個表都具有所有storeID,即使我嘗試使用或使用store表我可以帶來結果。我嘗試了與商店表的左連接和內連接。仍然輸出保持不變 –

1

obviusly它doesen't顯示左數據,因爲在左連接狀況和評論WHERE clausule排除他們

您可以將一個或idsp.Time == 0添加到您的左側右側使用WHERE

Where 
item.ItemLookupCode = '100006C0005' and 
(idsp.Time between '2017-07-16' and '2017-07-31' and idsp.StoreID <> 1001 and Item.ParentItem = 0 and Item.ItemType <> 9) OR idsp.Time IS NULL 
+0

時間是日期時間格式。那麼怎麼能給這樣的'idsp.Time == 0'這樣的 –

+0

值應該是null不是0抱歉,我的錯誤 –

1

表連接,你不應該把在WHERE子句,因爲這有效將LEFT JOIN變成INNER。

移動你的條件JOIN子句本身:

LEFT JOIN Item ON dynamics.ItemID = Item.ID 
    AND item.ItemLookupCode = '100006C0005' 
    AND Item.ParentItem = 0 
    AND Item.ItemType <> 9 
LEFT JOIN Sales idsp ON idsp.ItemID = Item.ID 
    AND idsp.StoreID = dynamics.StoreID 
    AND idsp.Time between '2017-07-16' and '2017-07-31' 
    AND idsp.StoreID <> 1001 
0

添加WHERE條件您的加盟:

LEFT JOIN Sales idsp WITH(NOLOCK) 
     ON idsp.ItemID = Item.ID 
     AND Item.ParentItem = 0 
     AND idsp.StoreID = dynamics.StoreID 
     AND idsp.Time between '2017-07-16' and '2017-07-31' 
     AND idsp.StoreID <> 1001 

從你的WHERE

+0

錯誤的ON子句。 – jarlh

+1

很確定這是正確的 – RealCheeseLord

+1

這是正確的答案,但它是重複問題中答案的重複,只有更少的解釋。 –

0
try with following code 

remove your where clause and put those conditions with your joins 




select 
    dynamics.ItemID, 
    item.ItemLookupCode, 
    dynamics.StoreID, 
    Department.Name Department, 
    Category.Name Category, 
    Supplier.Code, 
    Supplier.SupplierName, 
    sum(idsp.Qty) SoldQty, 
    sum(idsp.ExtendedCost) SoldExtCost, 
    sum(idsp.ExtendedPrice) SoldExtPrice, 
    dynamics.RestockLevel, 
    CASE WHEN isNull(sum(idsp.Qty),0) > (dynamics.RestockLevel * 0.75) THEN 'Fast Moving' 
    WHEN isNull(sum(idsp.Qty),0) > (dynamics.RestockLevel * 0.25) THEN 'Average Moving' 
    WHEN isNull(sum(idsp.Qty),0) > 0 THEN 'Slow Moving' 
    WHEN isNull(sum(idsp.Qty),0) = 0 THEN 'No Moving' END AS Moving 
from 
    ItemDynamic dynamics 
    inner join Store WITH(NOLOCK) on dynamics.StoreID = Store.ID and store.Inactive = 0 
    LEFT JOIN Item WITH(NOLOCK) on dynamics.ItemID = Item.ID and Item.ParentItem = 0 and item.ItemLookupCode = '100006C0005' 
    LEFT JOIN Sales idsp WITH(NOLOCK) on idsp.ItemID = Item.ID and Item.ParentItem = 0 and idsp.StoreID = dynamics.StoreID and idsp.Time between '2017-07-16' and '2017-07-31' and idsp.StoreID <> 1001 and Item.ParentItem = 0 and Item.ItemType <> 9 
    LEFT JOIN Department WITH(NOLOCK) on Department.ID = Item.DepartmentID 
    LEFT JOIN Category WITH(NOLOCK) on Category.ID = item.CategoryID 
    LEFT JOIN Supplier WITH(NOLOCK) on Supplier.ID = item.SupplierID 


Group By 
    dynamics.ItemID, 
    item.ItemLookupCode, 
    dynamics.StoreID, 
    dynamics.RestockLevel, 
    Department.Name, 
    Category.Name, 
    Supplier.Code, 
    Supplier.SupplierName 
order by 
    item.ItemLookupCode 
+0

我不應該在連接中過濾日期。因爲用戶將在任何日期進行過濾。 –

+0

你不能在連接中使用你的過濾變量嗎?我想這是可能的。 –