SQL запрос к серверу выбрать несколько ID в одном поле - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу спросить, как выбрать данные из двух таблиц, если у одной таблицы есть несколько идентификаторов

Пример:

Запрос таблицы:

RequestNo | supplierID
1231     |   '1','2','3'

Таблица поставщиков

ID   | supplier name
1    |   asin
2    |   acam
3    |   ande

Я хочу, чтобы результат выбора был таким:

Выбор результата

RequestNo  | SupplierName
1231 |  asin,acam,ande

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Если у вас sql -сервер-2017 и выше, вы можете использовать STRING_SPLIT и STRING_AGG

DECLARE @TableRequest TABLE (RequestNo INT, supplierID VARCHAR(20))
INSERT INTO @TableRequest VALUES
(1231 , '''1'',''2'',''3''')

DECLARE @TableSupplier TABLE (ID  INT, [supplier name] VARCHAR(10))
INSERT INTO @TableSupplier VALUES 
(1 , 'asin'),
(2 , 'acam'),
(3 , 'ande')

SELECT RequestNo, STRING_AGG([supplier name],',') SupplierName 
FROM 
    @TableRequest R
    OUTER APPLY STRING_SPLIT(R.supplierID,',') AS X
    LEFT JOIN  @TableSupplier S ON REPLACE(X.value,'''','') = S.ID
GROUP BY RequestNo

Результат:

RequestNo   SupplierName
----------- ------------------
1231        asin,acam,ande
0 голосов
/ 01 апреля 2020

Вы можете использовать STRING_AGG() как

select r.requestno, string_agg(s.name, ',')
from request r join supplier s
on concat(',', r.supplierid, ',') like concat('%,', s.id, ',%')
group by r.requestno

Но, не забудьте исправить модель данных

db <> fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...