Нужно сводить данные на основе их значений в соответствующие столбцы в MS SQL - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть 3 таблицы с отношением один ко многим. пусть говорят заказы и заказы предметов. Элементы имеют коды продуктов, такие как a, b, c, d и т. Д ...

В системе имеется около 15 различных кодов продуктов.

При присоединении мне нужно повернуть данные, чтобы иметь заказы и коды продуктов, как в одной строке, и просто преобразовать код продукта в логический флаг как 1 или 0.

Я знаю, что могу использовать self join 15 раз или использовать поиск в SELECT следующим образом

IIF((select DISTINCT 1 from <product code table> where code = 'a' and <join from order item table>) is null, 0, 1) для каждого кода продукта.

Производительность не так хороша при этом. Поэтому мне интересно, есть ли лучший способ использовать PIVOT, CROSS APPLY или что-то еще.

Запрос попытался, и он работает, но для этого есть лучший способ.

SELECT 
    order_id,
    order_item_id,
    IIF((select DISTINCT 1 from product_codes c where code = 'a' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as a,
    IIF((select DISTINCT 1 from product_codes c where code = 'b' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as b,
    IIF((select DISTINCT 1 from product_codes c where code = 'c' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as c,
    IIF((select DISTINCT 1 from product_codes c where code = 'd' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as d,
    IIF((select DISTINCT 1 from product_codes c where code = 'f' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as e,
    IIF((select DISTINCT 1 from product_codes c where code = 'g' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as f,
    IIF((select DISTINCT 1 from product_codes c where code = 'h' and i.item_product_code_id = c.product_code_id) is null, 0, 1) as g,
FROM orders o INNER JOIN order_items i ON o.order_id = i.order_id

Вот образец. Слева - то, как выглядит результат запроса, а справа - желаемый результат (я пока не могу вставить изображения внутри)

https://i.stack.imgur.com/9jmQy.jpg

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