使用SQL Server将列转换为行
你能帮我拿一个箱子吗 我有一张原始的桌子,像这样:使用SQL Server将列转换为行,sql,sql-server-2008,row,transpose,Sql,Sql Server 2008,Row,Transpose,你能帮我拿一个箱子吗 我有一张原始的桌子,像这样: MONTH | YEAR | PO1 | PO2 | PO3 +++++++++++++++++++++++++++++++++++++++++ 01 2010 100 20 10 DESCRIPTION | VALUE +++++++++++++++++++++++++++++++++++++++++ PO1 100 PO2 20 PO3
MONTH | YEAR | PO1 | PO2 | PO3
+++++++++++++++++++++++++++++++++++++++++
01 2010 100 20 10
DESCRIPTION | VALUE
+++++++++++++++++++++++++++++++++++++++++
PO1 100
PO2 20
PO3 10
那么我想要的结果是这样的:
MONTH | YEAR | PO1 | PO2 | PO3
+++++++++++++++++++++++++++++++++++++++++
01 2010 100 20 10
DESCRIPTION | VALUE
+++++++++++++++++++++++++++++++++++++++++
PO1 100
PO2 20
PO3 10
我应该如何在SQL Server中执行此操作,非常感谢您的帮助。您可以使用此函数将列转换为行:
create table #test
(month int,year int,po1 int,po2 int ,po3 int)
insert into #test
values
(5,2013,100,20,10)
select
Description,
value
from #test
unpivot
(
value
for Description in (po1, po2, po3)
) unpiv;
drop table #test
如果有多个列要unpivot
,则可以使用动态sql使用sql语句:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot
= stuff((select ','+quotename(C.column_name)
from information_schema.columns as C
where C.table_name = 'yourtable' and
C.column_name like 'PO%'
for xml path('')), 1, 1, '')
set @query
= 'select
Description,
value
from yourtable
unpivot
(
value
for Description in ('+ @colsunpivot +')
) u'
exec sp_executesql @query;
非常感谢你。我真的很感激。是的,动态sql查询就是从这个答案得到的。