2016-02-05 3 views
-1

Мне нужна помощь по TSQL Pivot и ошибка. любая помощь очень ценится. Ниже приведен запрос и данные.TSQL Pivot query

DECLARE @cols AS VARCHAR(8000), 
    @query AS VARCHAR(8000) 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.steps) 
      FROM Tableabc AS c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'VARCHAR(8000)') 
     ,1,1,'') 
--print @cols 
set @query = 'SELECT name, ElapsedTime_Sec,' + @cols + ' from 
      (
       select name,ElapsedTime_Sec 

       FROM Tableabc 
      ) x 
      pivot 
      (
       max(steps) 
       for ElapsedTime_Sec in (' + @cols + ') 
      ) p ' 


execute(@query) 

информация Таблица:

Table Info

+1

"Получение ошибки" действительно не полезно здесь. Какую ошибку вы получаете? Любые усилия, которые вы приложили к тому, чтобы сделать это проще для других людей, получат выгоды, поскольку тогда другие действительно могут помочь. Преобразование вашего изображения данных в фактическую таблицу (создание инструкции и вставки) было бы огромным шагом в правильном направлении. –

+0

Это моя первая проводка, необходимая для преобразования изображения в фактическую таблицу. Ошибка, которую я получаю, относится к одному из значений для @cols Msg 102, Level 15, State 1, Line 14 Неправильный синтаксис возле «Touch/Stain». – user5889117

+1

вы не можете иметь/в обычном имени столбца. вам нужно поставить квадратные скобки вокруг него, как [Touch/Stain] – Jeremy

ответ

0

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

CREATE TABLE #Tableabc(ID INT,name VARCHAR(256), Steps VARCHAR(1024),ElapsedTime_Sec INT); 

INSERT INTO #Tableabc(ID,name,Steps,ElapsedTime_Sec)VALUES 
    (2,'Features','Touch/Stain',25), 
    (29,'Shipping','Step requiring QA',129), 
    (47,'Behavioral','Gloves',8); 

DECLARE @cols AS VARCHAR(8000), 
    @query AS VARCHAR(8000); 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.steps) 
      FROM #Tableabc AS c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'VARCHAR(8000)') 
     ,1,1,'') 

set @query = 'SELECT * FROM #Tableabc 
      pivot 
      (
       max(ElapsedTime_Sec) 
       for Steps in (' + @cols + ') 
      ) p '; 
execute(@query); 

DROP TABLE #Tableabc; 

Выход:

+----+------------+--------+-------------------+-------------+ 
| ID | name | Gloves | Step requiring QA | Touch/Stain | 
+----+------------+--------+-------------------+-------------+ 
| 47 | Behavioral | 8  | NULL    | NULL  | 
| 2 | Features | NULL | NULL    | 25   | 
| 29 | Shipping | NULL | 129    | NULL  | 
+----+------------+--------+-------------------+-------------+