Отображение данных другим способом - PullRequest
2 голосов
/ 01 апреля 2020

Итак, у меня есть таблица, которая связывает ProductId и GroupId. Продукт можно отнести ко всем 5 группам (1-5). Если товара нет в таблице, он не относится ни к одной из групп

ProductId | GroupId
-------------------
100       |    1
100       |    2
200       |    1
200       |    2
200       |    3
200       |    4
200       |    5

Если посмотреть на эту таблицу, мы знаем, что Товар с идентификатором 100 назначен 2 группам ( 1,2) и продукт с идентификатором 200 назначается 5 группам (1-5).

Я пытаюсь написать запрос, который будет отображать каждый продукт в отдельной строке вместе со столбцами для всех 5 групп и значение бита, которое содержит информацию о том, принадлежит продукт группе или нет (0,1). Нужна визуализация нужного мне результата:

ProductId | IsGroup1 | IsGroup2 | IsGroup3 | IsGroup4 | IsGroup5
-----------------------------------------------------------------
100       |    1     |      1   |      0   |     0    |     0      -- this belongs to groups 1, 2
200       |    1     |      1   |      1   |     1    |     1      -- this belongs to all of the groups

Я знаю, что, возможно, смогу решить эту проблему с помощью самостоятельного объединения 5 раз для каждого отдельного продукта, но мне интересно, есть ли более элегантный способ его решения?

Любые советы будут высоко оценены

1 Ответ

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

Вы можете использовать пивот. Поскольку у вас есть только 5 групп, вам не нужен динамический c свод.

DB FIDDLE

select
   ProductId
   ,IsGroup1 = iif([1] is null,0,1)
   ,IsGroup2 = iif([2] is null,0,1)
   ,IsGroup3 = iif([3] is null,0,1)
   ,IsGroup4 = iif([4] is null,0,1)
   ,IsGroup5 = iif([5] is null,0,1)
from
(select ProductID, GroupId from mytable) x
pivot
(max(GroupId) for GroupId in ([1],[2],[3],[4],[5])) p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...