首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql server 小疑点

2012-01-08 
sql server 小问题名称一月二月三月四月五月....十二月张三100200300400500....1200我现在想把这张表改成

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
*/

热点排行