Как преобразовать категориальную переменную с несколькими значениями в несколько двоичных переменных в SQL? - PullRequest
0 голосов
/ 13 апреля 2019

Учитывая символьную переменную с несколькими значениями (в моем примере product), как я могу преобразовать ее в несколько дихотомических переменных одновременно, группируя по другой переменной (в моем примере customer)?

Пример:Как я могу преобразовать данные из

customer     product
custumerA    productA
customerA    productA
customerA    productC
customerA    productD
customerB    productB
customerB    productD
...

в

customer      productA    productB   productC  productD  .... productZ
customerA     1           0          1         1              0
customerB     0           1          0         1              0

...

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Динамический сводный запрос

Declare @sql nvarchar(max)

set @sql='select * from (select customer, product, count(product)Cnt from #mytable group by customer, product)tbl
          Pivot
         (sum(Cnt) for product In ('+stuff( (select distinct ', '+ product from #mytable for xml path('')),1,1,'')  +') ) as PivotTable'

 execute sp_executesql @sql

enter image description here

0 голосов
/ 13 апреля 2019

Предполагая, что вы знаете продукты, которые вы хотите, используйте агрегирование:

select customer,
       max(case when product = 'productA' then 1 else 0 end) as productA,
       max(case when product = 'productB' then 1 else 0 end) as productB,
       max(case when product = 'productC' then 1 else 0 end) as productC,
       max(case when product = 'productD' then 1 else 0 end) as productD
from t
group by customer;

Если вы не знаете список продуктов, вам потребуется динамический SQL, и то, как это сделать, зависит от базы данных.

...