SQL分组统计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 姓名

相关文档
最新文档