У меня проблема с комбинацией нескольких таблиц. Мой SQL-запрос:

SELECT *
FROM CRM.Bank as a
JOIN CRM.Documents as b ON a.Bank_ID = b.Documents_ID
JOIN CRM.Counterparties as c ON c.Counterparties_ID = b.Documents_ID
JOIN CRM.Items as d ON d.Document_tran_ID = b.Documents_ID 

У меня есть таблица CRM.Items, в которой есть следующие столбцы:

Item_ID     Document_tran_ID    Name
=======     ================    ====
1           1                   Advertising banner
2           1                   Shipping costs
3           2                   Garden tent
4           2                   Additional fasteners
5           2                   Shipping costs

И теперь у меня возникла проблема, как подключить к документу только первые элементы (d.Document_tran_ID = b.Documents_ID) ?? Я знаю, что должен использовать SELECT TOP. Однако у меня проблема с созданием правильного запроса

Ожидайте результата в виде:

Bank_ID     Documents_ID        Counterparties_ID       Document_tran_ID    Name
=======     ============        =================       ================    ====
22          1                   4                       1                   Advertising banner
23          2                   20                      2                   Garden tent
24          3                   21                      3                   Other

Сопоставляется только первый элемент из документа.

1
erdys 8 Окт 2018 в 10:47

2 ответа

Лучший ответ

Я думаю, вы можете попробовать использовать соединение CROSS APPLY . Во внутреннем запросе вы можете применить условие заказа для выбора строки TOP

SELECT *
FROM CRM.Bank as a
JOIN CRM.Documents as b ON a.Bank_ID = b.Documents_ID
JOIN CRM.Counterparties as c ON c.Counterparties_ID = b.Documents_ID
CROSS APPLY
  (select top 1 * from CRM.Items i where  i.Document_tran_ID = b.Documents_ID) as d
4
Thorsten Kettner 8 Окт 2018 в 08:07

Использовать подзапрос для таблицы документов

SELECT *
FROM CRM.Bank as a
JOIN ( select min(Document_tran_ID) as Documents_ID from CRM.Documents) as b ON a.Bank_ID = b.Documents_ID
JOIN CRM.Counterparties as c ON c.Counterparties_ID = b.Documents_ID
JOIN CRM.Items as d ON d.Document_tran_ID = b.Documents_ID 
0
Zaynul Abadin Tuhin 8 Окт 2018 в 07:51