获取所有已购买的订单以及SQL中的某些特定商品组

时间:2018-09-11 07:01:49

标签: sql sql-server sql-server-2012

我想知道如何获取所有购买的订单以及某些商品。我有一个主项目表,其中包含大约90个基本项目,我的我的订单表包含所有收据。因此输出显示在我的物料表中显示了所有已购买的订单以及我的基础物料。

主项目表:

ItemCode
-------
10001        
10002        
10003        
10004        

订单表:

SiteID   BusinessDate   ItemName   Units Sold   Units Sale   ItemCode  OrderNo
----------------------------------------------------------------------------
1        06/08/2018     Apple         1             5        10001    122-1
1        06/08/2018     Coffee        1             16       10002    122-1
1        06/08/2018     Ice Tea       2             7        10044    122-1
1        06/08/2018     Beans         9             18       10004    122-1

4        06/08/2018     Donuts        7             17       10066    122-7

1        06/08/2018     Bread         1             7        10003    122-4
1        06/08/2018     Beans         4             8        10004    122-4

2        06/08/2018     Apple         2             5        10001    122-2
2        06/08/2018     Coffee        1             6        10002    122-2

3        06/08/2018     Bread         3             5        10003    122-3
3        06/08/2018     Beans         7             17       10004    122-3

3        06/08/2018     Ice Tea       7             17       10044    122-5

4        06/08/2018     Ice Coffee    7             17       10050    122-6

结果:

SiteID   BusinessDate   ItemName   Units Sold   Units Sale   ItemCode  OrderNo
----------------------------------------------------------------------------
1        06/08/2018     Apple         1             5        10001    122-1
1        06/08/2018     Coffee        1             16       10002    122-1
1        06/08/2018     Ice Tea       2             7        10044    122-1
1        06/08/2018     Beans         9             18       10004    122-1

1        06/08/2018     Bread         1             7        10003    122-4
1        06/08/2018     Beans         4             8        10004    122-4

2        06/08/2018     Apple         2             5        10001    122-2
2        06/08/2018     Coffee        1             6        10002    122-2

3        06/08/2018     Bread         3             5        10003    122-3
3        06/08/2018     Beans         7             17       10004    122-3

查询输出必须仅向我返回所有与我的项目主表值一起购买的交易,例如,输出查询未返回订单号:122-6,因为我的项目代码不存在主物料代码,而显示订单号:122-1,因为订单和主物料表中存在一个或两个我的ItemCode

5 个答案:

答案 0 :(得分:3)

您可以尝试编写OrderNoSiteID匹配的子查询。

然后在join[Order]表中获得期望的结果。

SELECT o.* 
FROM [Order] o JOIN 
(
    SELECT DISTINCT OrderNo,SiteID
    FROM MasterItem m 
    JOIN [Order] o on o.ItemCode = m.ItemCode
) t1 on t1.OrderNo = o.OrderNo and t1.SiteID = o.SiteID

sqlfiddle

答案 1 :(得分:2)

像这样? (替换您自己的表名)

select * from [Order]
where [OrderNo] in (
    select distinct [OrderNo] 
    from [Order] o
    inner join [MasterItem] m on o.[ItemCode] = m.[ItemCode]
)

子查询获取其中包含所需项目的订单列表,然后用于从“订单”表中选择所有行。换句话说,这将返回所有Order行(任何项),其中MasterItem表中的项列表中的顺序是有项的。

答案 2 :(得分:0)

使用内部联接

SELECT * FROM Order o
JOIN Item i ON i.itemCode = o.itemCode

答案 3 :(得分:0)

使用内部联接:

select * from ordertable o
inner join mastertable m on o.itemcode=m.itemcode

答案 4 :(得分:0)

我希望使用存在

select * from [Order] o
where exists(select 1 from
(SELECT DISTINCT OrderNo,SiteID
    FROM MasterItem m 
    JOIN [Order] o on o.ItemCode = m.ItemCode
    ) t
    where t.OrderNo=o.OrderNo and t.SiteID=o.SiteID
    )