2013-06-25 6 views
4

Когда я запускаю SQL-запрос, который возвращает один столбец с переменным числом возвращаемых строк, я хотел бы преобразовать каждую строку в столбец VALUE (я не против каковы заголовок/заголовки столбца).T-SQL: преобразовать переменное число строк в столбцы

E.g.

Column1 
------- 
a 
b 
c 
d 
e 

Я хочу, чтобы скрипт, который будет преобразовывать выше в таблице, как:

Col1 Col2 Col3 Col4 Col5 
------------------------ 
a b c d e 

(Обратите внимание, что я не забочусь для имен столбцов).

Я знаю, что я не могу использовать PIVOT, поскольку номера строк не фиксированы (они основаны на SQL-запросе).

Любые идеи?

Спасибо!

+1

возможно дубликат: http://stackoverflow.com/questions/13103114/tsql-select- values-from-rows-as-columns – JanR

ответ

3

Вы пытаетесь настроить результаты и включить счетчик в свое имя столбца. Поскольку я предполагаю, что вы не знаете потенциального количества столбцов, вам нужно использовать Dynamic SQL для этого.

Это должно быть близко с помощью ROW_NUMBER, чтобы получить счетчик:

declare @cols AS NVARCHAR(MAX), 
     @colswithalias AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

set @colswithalias = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
          + ' AS Col' 
          + CAST(ROW_NUMBER() OVER (ORDER BY col1) as varchar(10)) 
         FROM yourtable 
         FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
         FROM yourtable 
         FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 


set @query = 'SELECT ' + @colswithalias + ' 
      from 
      (
       select col1 rn, col1 
       from yourtable 
      ) x 
      pivot 
      (
       max(rn) 
       for col1 in (' + @cols + ') 
      ) p ' 

execute(@query) 
+0

благодарит вас sgeddes :) –

+0

быстрый вопрос: знаете ли вы, как я могу сохранить вывод этого выполнения (@query) в таблицу temp? Пробовал несколько способов, но не работал! –

+0

Надеюсь, что это поможет - http://sqlfiddle.com/#!3/789548/2 – sgeddes