2010-12-31 1 views
1

У меня есть таблица с тремя столбцами, которую мы будем называть ID1, ID2 и Value.Условная проблема PIVOT/transform

Образец данных:

ID ID1 Value 
1 1 0 
1 2 1 
1 3 1 
1 3 2 
1 4 0 
1 4 1 
1 5 0 
1 5 2 
2 1 2 

Значение ограничено 0, 1 или 2.

Что мне нужно сделать, это стержень/преобразовать эти данные в счете на основе столбца, сколько раз появляется каждое возможное значение, сгруппированное по ID, ID1. Выходной сигнал вышеуказанного должен быть:

ID ID1 Val0 Val1 Val2 
1 1 1  0  0 
1 2 0  1  0 
1 3 0  1  1 
1 4 1  1  0 
1 5 1  0  1 
2 1 0  0  1 

Я использую SQL Server 2008. Как это сделать?

+0

Я предполагаю, что вторая строка в результатах должна быть «1 2 0 1 0»? В исходных данных есть только одна строка '1 2 1'. –

+0

Вы правы. Я исправил это. – IamIC

ответ

3
SELECT ID, 
     ID1, 
     COUNT(CASE WHEN Value=0 THEN 1 END) AS Val0, 
     COUNT(CASE WHEN Value=1 THEN 1 END) AS Val1, 
     COUNT(CASE WHEN Value=2 THEN 1 END) AS Val2 
FROM your_table 
GROUP BY ID, 
      ID1 
+0

Красиво сделано, @ Мартин! Случай граф. Умная. – IamIC