获取在SQL中购买的所有订单以及某些项目组

问题描述 投票:2回答:5

我想知道如何获得与特定商品组一起购买的所有订单。我有一个主项目表,其中包含大约90个基于项目,我有我的订单表,其中包含所有收据。所以输出节目显示了我的物品表中与我的基础物品一起购买的所有订单。

Master Item Table:

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

Order Table:

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

Result:

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中有一个或两个存在于订单和主项目表中

sql sql-server sql-server-2012
5个回答
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


2
投票

像这样的东西? (替换你自己的表名)

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

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


0
投票

使用内部联接

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

0
投票

使用内连接:

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

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
    )
© www.soinside.com 2019 - 2024. All rights reserved.