sql server 小问题
名称 一月 二月 三月 四月 五月 ....十二月
张三 100 200 300 400 500 ....1200
我现在想把这张表改成如下格式
名称 月份 金额
张三 一月 100
张三 二月 200
张三 三月 300
张三 四月 400
张三 五月 500
... .... ...
张三 12月 1200
现有方法如下;
SELECT 名称, '一月 ' as 月份,一月 as 金额 from tablename group by 名称
UNION
SELECT 名称, '二月 ' as 月份,二月 as 金额 from tablename group by 名称
UNION
.
.
.
SELECT 名称, '十一月 ' as 月份,十一月 as 金额 from tablename group by 名称
UNION
SELECT 名称, '十二月 ' as 月份,十二月 as 金额 from tablename group by 名称
以上的方法能解决,但是遇到多的表就爱麻烦了。有没有其他用函数的方法。
另外问一下;下面什么意思啊 我看了3个小时没有看懂,请高手执教一下多谢
列变成行
declare @ varchar(8000)
set @= ' '
select @=@+rtrim(name)+ ' from t1 union all select ' from syscolumns where id=object_id( 't1 ')
set @=left(@,len(@)-len( ' from t1 union all select '))
--print @
exec( 'select '+@+ ' from t1 ')
[解决办法]
declare @t table(姓名 varchar(10),一月 int, 二月 int, 三月 int, 四月 int, 五月 int)
insert into @t select '张三 ',100,200,300,400,500
select 姓名,月份,金额 from @t
unpivot
(金额 for 月份 in ([一月],[二月],[三月],[四月],[五月])
)
as unpt
/*
姓名 月份 金额
------- ------- -----------
张三一月100
张三二月200
张三三月300
张三四月400
张三五月500
*/