关于字段的转置
有一个表数据
t_a t_b t_c t_d
1 07-01 23 le
2 07-01 33 pa
3 07-01 12 du
4 07-02 45 le
5 07-02 23 pa
6 07-02 45 du
如何转换成
a date le pa du
1 07-01 23 33 12
2 07-02 45 23 45
谢谢各位大哥帮忙
------解决方案--------------------行转列。csdn上有很多,你搜索一下就有答案了。
不是不告诉你,而是你需要自己找答案
------解决方案--------------------动态交叉表。
参考代码:
--动态生成交叉表
create table #t1 ( 姓名 varchar (50) null , 性别 varchar (50) null , 国籍 int null , 金额 int null )
insert #t1 ( 姓名 , 性别 , 国籍 , 金额 ) values ( 'a ' , '男 ' , 1 , 20 )
insert #t1 ( 姓名 , 性别 , 国籍 , 金额 ) values ( 'b ' , '女 ' , 2 , 10 )
insert #t1 ( 姓名 , 性别 , 国籍 , 金额 ) values ( 'c ' , '女 ' , 1 , 30 )
create table #t2 ( 国籍标识 int null , 名称 varchar (50) null )
insert #t2 ( 国籍标识 , 名称 ) values ( 1 , '中国 ' )
insert #t2 ( 国籍标识 , 名称 ) values ( 2 , '美国 ' )
declare @s varchar(8000), @s2 varchar(8000)
set @s = ' '
select @s = @s+ ', '+quotename(isnull(min(#t2.名称), ' ') + '金额 ')+ '=sum(case #t1.国籍 when ' ' '+cast(#t1.国籍 as varchar(20))+ ' ' ' then 金额 else 0 end) '
from #t1 inner join #t2 on #t1.国籍=#t2.国籍标识
group by #t1.国籍
order by #t1.国籍
set @s = 'select 性别 '+@s+ ' from #t1 group by 性别 '
print @s
set @s2= ' '
select @s2 = @s2+ ', '+quotename(isnull(min(#t2.名称), ' ') + '金额 ')+ '=sum(case #t1.国籍 when ' ' '+cast(#t1.国籍 as varchar(20))+ ' ' ' then 金额 else 0 end) '
from #t1 inner join #t2 on #t1.国籍=#t2.国籍标识
group by #t1.国籍
order by #t1.国籍
set @s2 = 'select ' '合计 ' ' as 性别 '+@s2+ ' from #t1 '
print @s2
exec( 'select * from ( ' + @s + ' union ' + @s2 + ') tt order by 性别 desc ')
drop table #t1
drop table #t2
/*
中国金额 美国金额
--------------------------------------
女 30 10
男 20 0
合计 50 10
*/
------解决方案--------------------create table T(t_a int, t_b varchar(10), t_c int, t_d varchar(10))
insert T select 1, '07-01 ', 23, 'le '
union all select 2, '07-01 ', 33, 'pa '
union all select 3, '07-01 ', 12, 'du '
union all select 4, '07-02 ', 45, 'le '
union all select 5, '07-02 ', 23, 'pa '
union all select 6, '07-02 ', 45, 'du '