2017-03-08 55 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

相关问题