SQL Server 2008 Unpivot Преобразование неизвестного количества столбцов в строки - PullRequest
1 голос
/ 10 марта 2012

Оригинал:

EmpID     Week1     Week2    Week3...(Unknown unmber of weeks)
001       1         2        3
002       2         1        0
003       3         4        0

Цель:

EmpID   Attibute    AttributeValue
001         Week1       1
001         Week2       2
001         Week3       3
002         Week1       2
002         Week2       1
002         Week3       0
003         Week1       3
003         Week2       4
003         Week3       0
             .
             .
             .
(will auto generate unknown # of weeks and their values)

Я сделал домашнее задание, я не нашел такого задания, как этот.Единственное, что я нашел похожим, это « имя столбца динамической сводки SQL Server (UNPIVOT) со значением строки ».Я попытался выполнить этот запрос, но SQL Server не возвращает результата, и в сообщениях отображается сообщение «Команда (ы) выполнена успешно.)

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

ну, вы не можете иметь "неизвестное" количество столбцов в вашей таблице, но смотрите Использование PIVOT и UNPIVOT :

SELECT EmpID, Attibute, AttributeValue
FROM 
   (SELECT EmpID, Week1, Week2, Week3
   FROM pvt) p
UNPIVOT
   (AttributeValue FOR Attibute IN 
      (Week1, Week2, Week3)
)AS unpvt
1 голос
/ 12 марта 2012

Предполагая, что ваше имя таблицы Emp и вы хотите отменить вывод столбцов, которые соответствуют Week%:

declare @SQL nvarchar(max)

set @SQL = 
  N'select EmpID, Attribute, AttributeValue from Emp unpivot (AttributeValue for Attribute in ('+
  stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('Emp') and
               C.name like 'Week%'
         for xml path('')), 1, 1, '')+
  N')) as U order by EmpID, Attribute'

exec (@SQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...