У меня есть 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