Así que tengo una tabla que se une ProductId y GroupId. El producto puede ser asignado a todos los 5 grupos (1-5). Si el producto no existe en la tabla, no es asignado a cualquiera de los grupos
ProductId | GroupId
-------------------
100 | 1
100 | 2
200 | 1
200 | 2
200 | 3
200 | 4
200 | 5
Echando un vistazo a esta tabla, sabemos que el producto que va por id 100 se asigna a 2 grupos (1,2) y el producto de Identificación 200 se asigna a 5 grupos (1-5).
Estoy intentando escribir una consulta que mostrará cada producto en fila separada, junto con columnas para todos los grupos 5 y un valor de bits que contiene información si el producto pertenece al grupo o no (0,1). Una visualización de la necesidad resultado que:
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
Sé que probablemente podría resolverlo utilizando un auto unirse a 5 veces en cada producto distinto, pero me pregunto si hay una forma más elegante de resolverlo?
Algún consejo estarán muy apreciadas
Se puede usar un pivote. Ya que sólo tiene 5 grupos que no necesita un pivote dinámico.
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