2013-09-11 4 views
1

У меня есть запрос, который возвращает набор данных с 2-мя колоннами, как показано ниже:Перестройка файл данных из строк в столбцы в SQL-SERVER

-------------------------- 
|spec-number|project | 
|-----------|-----------| 
|649841  |A   | 
|649841  |B   | 
|649841  |D   | 
|84709  |E   | 
|84709  |B   | 
|84709  |C   | 
|84709  |K   | 
------------------------- 

Количество проектов спецификацию номер могут быть вовлечены в мог потенциально может быть бесконечным.

То, что я хотел бы результат, чтобы посмотреть, как это:

------------------------------------------------- 
|spec-number|project1|project2|project3|project4| 
|-----------|--------|--------|--------|--------| 
|649841  |A  |B  |D  |  | 
|84709  |E  |B  |C  |K  | 
------------------------------------------------- 

Я попытался поворотным, но это только дает мне перекрестную вкладку проектов по спецификации-номер. Любая помощь будет принята с благодарностью!

ответ

0

Если вы хотите, чтобы они были отдельными столбцами, вы можете рассчитать номер проекта и использовать его для поворота. Далее используется метод group by для агрегации:

select spec_num, 
     max(case when seqnum = 1 then project end) as project1, 
     max(case when seqnum = 2 then project end) as project2, 
     max(case when seqnum = 3 then project end) as project3, 
     max(case when seqnum = 4 then project end) as project4 
from (select t.*, 
      row_number() over (partition by spec_number order by project) as seqnum 
     from t 
    ) t 
group by spec_num; 

Если вам нужно переменное число столбцов, то вам придется использовать динамический SQL. Это можно также сформулировать как запрос pivot, если хотите.

+0

Спасибо Гордон. Почти готово! может быть переменное количество столбцов проекта. Не могли бы вы указать мне пример динамического кода sql, о котором вы говорите? –

+0

Вот пример: http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query. –

+0

спасибо Гордон. понял это в конце. –

Смежные вопросы