Viendo los datos de una manera diferente

bapster:

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

scsimon:

Se puede usar un pivote. Ya que sólo tiene 5 grupos que no necesita un pivote dinámico.

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=384254&siteId=1
Recomendado
Clasificación