威克士电动工具专卖店:SQL题:统计问题(ORACLE)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/10 14:17:03
表字段描述:
name 名字
time 日期
out 支出
表单如下:
name time out
people_A 15-JUL-02 500
people_B 15-JUL-02 700
people_C 17-JUL-02 200
people_D 17-JUL-02 100
要求将上表转换成下表:
*********15-JUL-02****16-JUL-02****17-JUL-02
people_A***500***********0***********100****
people_B***700***********0***********0******
people_C***0*************0***********0******
请问有没有效率比较高的SQL语句?敬请各位高手发挥。

给你举个行列转换的例子,你把具体的字段名改改就行

假设有张学生成绩表(CJ)如下
[姓名] [学科] [成绩]
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
王五 数学 60

想变成
[姓名] [语文] [数学] [物理]
张三 80 90 85
李四 85 92 82
王五 null 60 null

declare @sql varchar(4000)

set @sql = 'select 姓名'

select @sql = @sql + ',sum(case 学科 when '''+学科+''' then 成绩 end) as '+学科
from (select distinct 学科 from CJ) as a

set @sql = @sql+' from cj group by 姓名'

exec(@sql)

不可转,你的新表里的列是不断增加的,不符合一般数据库里要求的固定列的要求,所以,没有办法,你想想,你的列会越来越多,这个表结构又不能随意变动