Получить все заказы, которые были приобретены вместе с группой определенных предметов в SQL - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел бы знать, как я смогу получить все заказы, которые были приобретены вместе с группой определенных предметов.У меня есть таблица основных элементов, в которой содержится около 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 голосов
/ 11 сентября 2018

Я пользуюсь миром

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
    )
0 голосов
/ 11 сентября 2018

Использовать внутреннее соединение:

select * from ordertable o
inner join mastertable m on o.itemcode=m.itemcode
0 голосов
/ 11 сентября 2018

Как то так? (подставьте свои собственные имена таблиц)

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

Подзапрос получает список заказов, в которых есть нужные элементы, затем он используется для выбора всех строк в таблице «Заказы». Другими словами, это вернет все Order строки (любой элемент), где есть элемент в порядке, который находится в списке элементов в таблице MasterItem.

0 голосов
/ 11 сентября 2018

Использовать внутреннее соединение

SELECT * FROM Order o
JOIN Item i ON i.itemCode = o.itemCode
0 голосов
/ 11 сентября 2018

Вы можете попробовать написать подзапрос, которому OrderNo и SiteID соответствуют.

затем выполните таблицу 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

...