Select 类型名称,Sum(电子) As 电子,Sum(电脑) As 电脑,Sum(合计) As 合计
From (
Select
'基本' As 类型名称,
Case 类型名称 When '电子' Then 基本 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 基本 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 基本 Else 0 End As 合计
From
TableA
Union All
Select
'业绩' As 类型名称,
Case 类型名称 When '电子' Then 业绩 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 业绩 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 业绩 Else 0 End As 合计
From
TableA
Union All
Select
'提成' As 类型名称,
Case 类型名称 When '电子' Then 提成 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 提成 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 提成 Else 0 End As 合计
From
TableA
) T Group By 类型名称 Order By 类型名称 Desc
From (
Select
'基本' As 类型名称,
Case 类型名称 When '电子' Then 基本 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 基本 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 基本 Else 0 End As 合计
From
TableA
Union All
Select
'业绩' As 类型名称,
Case 类型名称 When '电子' Then 业绩 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 业绩 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 业绩 Else 0 End As 合计
From
TableA
Union All
Select
'提成' As 类型名称,
Case 类型名称 When '电子' Then 提成 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 提成 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 提成 Else 0 End As 合计
From
TableA
) T Group By 类型名称 Order By 类型名称 Desc
If Object_id('TableA') Is Not Null
Drop Table TableA
Go
Create Table TableA(类型名称 Varchar(10),基本 Int,业绩 Int,提成 Int)
Insert TableA Select '电子',500,1000,100
Union All Select '电脑',400,1200,240
Union All Select '合计',900,2200,340---查询测试数据
Select * From TableA---查询结果
Select 类型名称,Sum(电子) As 电子,Sum(电脑) As 电脑,Sum(合计) As 合计
From (
Select
'基本' As 类型名称,
Case 类型名称 When '电子' Then 基本 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 基本 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 基本 Else 0 End As 合计
From
TableA
Union All
Select
'业绩' As 类型名称,
Case 类型名称 When '电子' Then 业绩 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 业绩 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 业绩 Else 0 End As 合计
From
TableA
Union All
Select
'提成' As 类型名称,
Case 类型名称 When '电子' Then 提成 Else 0 End As 电子,
Case 类型名称 When '电脑' Then 提成 Else 0 End As 电脑,
Case 类型名称 When '合计' Then 提成 Else 0 End As 合计
From
TableA
) T Group By 类型名称 Order By 类型名称 Desc
--结果
/*
类型名称 电子 电脑 合计
---- ----------- ----------- -----------
业绩 1000 1200 2200
提成 100 240 340
基本 500 400 900(所影响的行数为 3 行)
*/
------------------------------------------------------------------------------------
--生成测试数据
create table test1(A varchar(20),b int,c int,d int,e int)
insert into test1 select 'x',1,2 ,3 ,4
insert into test1 select 'y',5,6 ,7 ,8
insert into test1 select 'z',9,10,11,12
--生成中间数据表
declare @s varchar(8000)
set @s='create table test2(a varchar(20)'
select @s=@s+','+A+' varchar(10)' from test1
set @s=@s+')'
exec(@s)--借助中间表实现行列转换
declare @name varchar(20)declare t_cursor cursor for
select name from syscolumns
where id=object_id('test1') and colid>1 order by colidopen t_cursorfetch next from t_cursor into @namewhile @@fetch_status=0
begin
exec('select '+@name+' as t into test3 from test1')
set @s='insert into test2 select '''+@name+''''
select @s=@s+','''+rtrim(t)+'''' from test3
exec(@s)
exec('drop table test3')
fetch next from t_cursor into @name
end
close t_cursor
deallocate t_cursor
--查看行列互换处理结果
select * from test2/*
a x y z
---- ---- ---- ----
b 1 5 9
c 2 6 10
d 3 7 11
e 4 8 12
*/
--删除测试数据
drop table test1,test2
2005 用 povit..