我有一个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列数据。 软件名称有数百种不同的值。
答案 0 :(得分:1)
您可以通过几种不同的方式取消数据,包括UNPIVOT函数或CROSS APPLY,以将多列转换为行。
<强> UNPIVOT 强>
select computer, software
from yourtable
unpivot
(
software
for col in ([Col1], [Col2], [Col3], [Col4])
) un;
交叉申请:
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 with Demo。您还可以使用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;