存储过程可以这样吗,用DataTable估计也好做点,把表查出来然后把元素按你的要求生成一个DataTable.
解决方案 »
- 关于函数的返回值对程序的影响问题
- C#Web页面中,有一个用户控件(里面有二个Button) 在一个页面A中调用它,如何在A中实现用户控件的事件功能啊
- Debug模式和Release模式有什么用和区别?
- 求救,在线等,多文档控件dockpanel suite问题
- .NET如何做个用户自己的控件,然后放到工具箱里去?
- 求救!如何求一datatable中各列的和及平均值?
- .Net 技术联盟 群: 9072801欢迎大家加入哦~~~~~~~~~~
- 自定义控件问题(做一个类似于CheckBoxList的控件,在Selecteditem属性中追加项目时要追加HyperLink而非CheckBox)
- 能否将DataGrid里面的数据以表格的形式打印出来
- 数据绑定不上了 怎么回事?
- textbox里面的内容不让选择怎么做
- ------------------- table问题------难道没有人会吗------------------------
如果用SQL 2000中,要实现行列转换,需要综合利用聚合函数和动态SQL
如果用SQL 2005,可以使用新引进的关键字PIVOT/UNPIVOT,轻松实现行列转换PIVOT创建测试表,插入测试数据create table test(id int,name varchar(20),quarter int,profile int)
insert into test values(1,'a',1,1000)
insert into test values(1,'a',2,2000)
insert into test values(1,'a',3,4000)
insert into test values(1,'a',4,5000)
insert into test values(2,'b',1,3000)
insert into test values(2,'b',2,3500)
insert into test values(2,'b',3,4200)
insert into test values(2,'b',4,5500)select * from testid name quarter profile
----------- -------------------- ----------- -----------
1 a 1 1000
1 a 2 2000
1 a 3 4000
1 a 4 5000
2 b 1 3000
2 b 2 3500
2 b 3 4200
2 b 4 5500(8 row(s) affected)利用PIVOT将个季度的利润转成横向显示:select id,name,
[1] as "一季度",
[2] as "二季度",
[3] as "三季度",
[4] as "四季度"
from
test
pivot
(
sum(profile)
for quarter in
([1],[2],[3],[4])
)
as pvt
[/code]
id name 一季度 二季度 三季度 四季度
----------- -------------------- ----------- ----------- ----------- -----------
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500(2 row(s) affected)UNPIVOT建立测试表,插入测试数据drop table testcreate table test(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)insert into test values(1,'a',1000,2000,4000,5000)
insert into test values(2,'b',3000,3500,4200,5500)
select * from testid name Q1 Q2 Q3 Q4
----------- -------------------- ----------- ----------- ----------- -----------
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500(2 row(s) affected)利用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:select id,name,quarter,profile
from
test
unpivot
(
profile
for quarter in
([Q1],[Q2],[Q3],[Q4])
)
as unpvtid name quarter profile
----------- -------------------- ---------- -----------
1 a Q1 1000
1 a Q2 2000
1 a Q3 4000
1 a Q4 5000
2 b Q1 3000
2 b Q2 3500
2 b Q3 4200
2 b Q4 5500(8 row(s) affected)
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)