主题:求高难度sql语句
triumph
[专家分:160] 发布于 2006-06-25 13:56:00
表1 表2
学号 姓名 班级 学号 学年 学期 职务
11 aa 01 11 2005-2006 2 班长
12 bb 01 12 2005-2006 2 团支书
13 cc 01 13 2005-2006 2 学习委员
14 ee 01
15 aaa 02 15 2005-2006 2 班长
......想得到这样一张统计2005-2006学年第2学期每个班的班委的名单的
表3
班级 班长 团支书 学习委员 宣传委员 体育委员 生活委员 文艺委员
01 aa bb cc
02 aaa
....
回复列表 (共26个回复)
11 楼
233238447 [专家分:1350] 发布于 2006-07-20 23:46:00
看了,不是一样的吗!
12 楼
233238447 [专家分:1350] 发布于 2006-07-21 14:58:00
!
13 楼
smallhong [专家分:30] 发布于 2006-07-24 16:37:00
牛叉
14 楼
233238447 [专家分:1350] 发布于 2006-07-26 21:41:00
f
15 楼
233238447 [专家分:1350] 发布于 2006-07-26 21:43:00
嗯,很不错!
16 楼
233238447 [专家分:1350] 发布于 2006-07-26 21:46:00
嗯,很不错!我以前也看过这样的帖,也想过这样做,可是上面那个,还要分班级,判断空值,分两张表,而且我是这样想的
学号为主键,职务应该是唯一的,一个班不允许有两个相同职务出现
但一个人能同时胜任多个职务
所以放弃了那种办法!
17 楼
233238447 [专家分:1350] 发布于 2006-07-26 21:50:00
嗯,很不错!我以前也看过这样的帖,也想过这样做,可是上面那个,还要分班级,判断空值,分两张表,而且我是这样想的
学号为主键,职务应该是唯一的,一个班不允许有两个相同职务出现
但一个人能同时胜任多个职务
所以放弃了那种办法!
18 楼
kkzjk [专家分:440] 发布于 2006-07-27 21:30:00
你是想在前台提取这些数据并且让那些数据按照你想要的样子排呢?
还是想在后台建多张你要求表来放那些数据啊?
如果是在前台的话后台不用建表只需要用聚合函数就可以搞定。就一个存储过程。
select 班级,姓名
,sum(case 职务 when 班长 then 姓名else 0 end) as 班长
,sum(case 职务 when 团支书 then 姓名else 0 end) as 团支书
,sum(case 职务 when 学习委员 then 姓名else 0 end) as 学习委员
,sum(case 职务 when 无赖 then 姓名else 0 end) as 无赖
FROM 表1 INNER JOIN 表2 ON 表1.xh = 表2.xh
where 学期=2 and 学年=2005-2006
group by 班级
对应的多少个职务就写多少个SUM()就可以了。
在前台调用这个存储过程时用对应的新字段如:班长可以绑定数据到表格等
如果是在后台数据库建多个表那想怎么建都行很简单。
19 楼
kkzjk [专家分:440] 发布于 2006-07-27 21:39:00
如果是在后台建表的话怎么建都行不难。。。
你是想在前台提取数据吧。而且让数据照你的意排吧!
这种方法叫数据打横,也叫行列转置。
select 表1.班级
,sum(case 职务 when 班长 then 职务 else 0 end) as 班长
,sum(case 职务 when 学习委员 then 职务 else 0 end) as 学习委员
FROM 表1 INNER JOIN 表2 ON 表1.xh = 表2.xh
where 学期=2 and 学年=2005-2006
group by 班级
对应多少个职务就写多少个sum()
前台绑定数据可根据as 后面的新字段去绑定。
希望能帮到你!
20 楼
kkzjk [专家分:440] 发布于 2006-07-27 21:41:00
还以为之前的帖没发出去。。。
害我多打了一遍
我来回复