Транспонировать или разделить столбцы программного обеспечения на два столбца

У меня есть таблица SQL 2008, содержащая одну строку для каждого компьютера со многими столбцами названий программного обеспечения:

Computer      Col1        Col2        Col3          Col4
PC1           Acrobat     Word        Excel
PC2           Word        Access      
PC3           Google
PC4           Word        Excel       SQL2008       Maximizer

Я хотел бы объединить его в два столбца следующим образом:

Computer        Software
PC1             Acrobat
PC1             Word
PC1             Excel
PC2             Word
PC2             Access
PC3             Google
PC4             Word
PC4             Excel
PC4             SQL2008
PC4             Maximizer

Это не совокупность столбцов, поэтому работает ли разворот или транспонирование?

Каждая строка содержит от 1 до 32 столбцов данных. Существуют сотни различных значений имен программ.


person kevro    schedule 04.09.2013    source источник


Ответы (1)


Вы можете развернуть данные несколькими способами, включая функцию UNPIVOT или CROSS APPLY для преобразования нескольких столбцов в строки.

UNPIVOT:

select computer, software
from yourtable
unpivot
(
  software 
  for col in ([Col1], [Col2], [Col3], [Col4])
) un;

См. SQL Fiddle с демонстрацией.

ПЕРЕСЕЧНОЕ ПРИМЕНЕНИЕ:

select t.computer, c.software
from yourtable t
cross apply
(
  select col1 union all
  select col2 union all
  select col3 union all
  select col4
) c (software)
where c.software is not null;

См. SQL Fiddle с демонстрацией. Вы также можете использовать CROSS APPLY со VALUES в зависимости от вашей версии SQL Server:

select t.computer, c.software
from yourtable t
cross apply
(
  values
    (col1), (col2),
    (col3), (col4)
) c (software)
where c.software is not null;

См. SQL Fiddle с демонстрацией.

person Taryn    schedule 04.09.2013