SQL分组统计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sql 分组统计
悬赏分:0 |解决时间:2009-4-27 09:50 |提问者:jinbei_8276
题目如下:
在数据库中有2个表
产品总分类数据表(表一):
编号分类名称
1 电动工具
2 手动工具
3 测量工具
4 ...
5 ...
这些数据是动态更新的
小类数据表(表二):
编号小类名称总分类编号
1 钳类工具 1
2 扳手工具 1
3 电钻 2
4 电锤 2
5 。。 2
6 。。。 1
数据也是动态更新的。
现在我要呈现的显示方式是:
电动工具:钳类工具、扳手工具、。。。、。。。
手动工具:电钻、电锤、。。。
。。。:。。。、。。。、。。
。。。
还请大家多多指点下SQL语句,在线等,谢谢!
问题补充:
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名as 姓名,
max(case 课程when '语文' then 分数else 0 end) 语文,
max(case 课程when '数学' then 分数else 0 end) 数学,
max(case 课程when '物理' then 分数else 0 end) 物理
from tb
group by 姓名
首先谢谢你的回答,如果这里的语文,数学,物理是动态信息,也就是说,有可以能是历史,体育等等,随时都可能有新的科目,该如何显示呢?
最佳答案
--SQL SERVER 2000 动态SQL。
declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ' , max(case 课程when ''' + 课程+ ''' then 分数else 0 end) [' + 课程+ ']'
from (select distinct 课程from tb) as a
set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(18,2)) 平均分, sum(分数) 总分from tb group by 姓名'
exec(@sql)
普通行列转换
问题:假设有张学生成绩表(tb)如下:
姓名课程分数
张三语文74
张三数学83
张三物理93
李四语文74
李四数学84
李四物理94
想变成(得到如下结果):
姓名语文数学物理
---- ---- ---- ----
李四74 84 94
张三74 83 93
-------------------
*/
create table tb(姓名varchar(10) , 课程varchar(10) , 分数int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名as 姓名,
max(case 课程when '语文' then 分数else 0 end) 语文,
max(case 课程when '数学' then 分数else 0 end) 数学,
max(case 课程when '物理' then 分数else 0 end) 物理
from tb
group by 姓名