2017-03-08 54 views
0

我碰到路障存在這裏的項目是我的問題:如何列出和分類不表中

我有一個表,我們稱之爲項目凡在我的目錄中的所有項目上市。 我有ItemSold在哪裏列出在哪一天出售的每件商品。 我有另一張名爲Sales的表,它有我想查詢的日期。

這是我的例證:

售出商品 enter image description here

銷售 enter image description here

這顯然是微不足道,找出在哪些天出售什麼物品表 enter image description here

項目。我的挑戰是確定哪些項目不在哪一天銷售。

我曾嘗試:

select i.itemid from items i 
where i.ItemID not in (SELECT   i.ItemID 
FROM   Sales d INNER JOIN 
         ItemSold i ON d.SaleDate = i.SaleDate) 

但是,只有爲我提供了所有未售出的物品。

我期待以下結果:

enter image description here

我使用MSSQL。 我附上腳本來重新創建表和數據:

CREATE TABLE [dbo].[Items](
    [ItemID] [int] NULL 
) ON [PRIMARY] 

GO 

CREATE TABLE [dbo].[ItemSold](
    [SaleDate] [date] NULL, 
    [ItemID] [int] NULL 
) ON [PRIMARY] 

GO 


CREATE TABLE [dbo].[Sales](
    [SaleDate] [date] NULL 
) ON [PRIMARY] 

GO 

我會感謝你的幫助。這是工作中一個相當混亂的問題的簡化版本。

回答

1

您首先生成所有可能的行 - 所有日期和所有項目。然後使用left join篩選出已銷售的商品:

select i.itemid, s.saledate 
from items i cross join 
    sales s left join 
    itemsold si 
    on si.itemid = i.itemid and si.saledate = s.saledate 
where si.itemid is null; 
+0

哇......就這樣!非常感謝! – user1205746

相關問題