2016-09-08 1 views
1

В SqlServer 2008, у меня есть таблица вроде этого:В SqlServer, как присоединиться один столбец из нескольких строк в одну строку с несколькими столбцами

+--------+--------------------+--------------+ 
some_key | some_discriminator | some_column 
-------- | ------------------ | ------------- 
K1  | D1     | V1 
K1  | D2     | V2 
K2  | D1     | V3 
K2  | D2     | V4 

, и я хотел бы выполнить запрос, который производит это:

+--------+------+-------- 
some_key |D1 | D2 
---------|--------------- 
K1  | V1 | V2 
K2  | V3 | V4 
+0

вы можете найти часть ответа в этом сообщении => http://stackoverflow.com/questions/39390972/sql-server-pivot-only-on-a-part-of-the-result/39392731#39392731 –

ответ

2

простой стержень запрос может удовлетворить ваши потребности:

SELECT some_key, 
     MAX(CASE WHEN some_discriminator = 'D1' THEN some_column ELSE NULL END) AS D1, 
     MAX(CASE WHEN some_discriminator = 'D2' THEN some_column ELSE NULL END) AS D2 
FROM yourTable 
GROUP BY some_key 

группировка работает, потому что MAX игнорирует значения NULL и MAX одного VARCHAR возвращает эту строку.

Но это может оказаться неприемлемым, если у вас много столбцов или динамических столбцов, которые вы хотите отобразить в результате поворота.

+0

Спасибо за ответ Тим. Я должен был упомянуть типы столбцов. Some_column содержит varchars. Я получаю сообщение об ошибке, потому что оператор SUM не ожидает varchar. –

+0

@KevinStembridge Извините, я должен был использовать 'MAX' вместо' SUM'. –

+0

Фантастический. Большое спасибо. –