2

So I have a table that binds ProductId and GroupId. The product can be assigned to all of 5 groups (1-5). If the product doesn't exist in the table, it's not assigned to any of the group

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

Taking a look at this table, we know that Product that goes by id 100 is assigned to 2 groups (1,2) and the product of id 200 is assigned to 5 groups (1-5).

I'm trying to write a query that will display each product in separate row, together with columns for all of the 5 groups and a bit value that contains information if the product belongs to the group or not (0,1). A visualization of the result I need:

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

I know I could probably solve it using a self join 5 times on each distinct product, but I'm wondering if there's a more elegant way of solving it?

Any tips will be strongly appreciated

bapster
  • 151
  • 8

1 Answers1

2

You could use a pivot. Since you only have 5 groups you don't need a dynamic pivot.

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
S3S
  • 24,809
  • 5
  • 26
  • 45
  • That does the job, thanks. Could you elaborate more on the dynamic pivot queries? I'm now wondering how could I solve it as easy if I had a bigger amount of groups. Thanks in advance – bapster Apr 01 '20 at 16:11
  • @bapster there are a few good examples. Here is one from Blue Feet herself, who is a DBA for Stackoverflow. https://stackoverflow.com/a/10404455 – S3S Apr 02 '20 at 01:01