回 帖 发 新 帖 刷新版面

主题:求高难度sql语句

表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 楼

看了,不是一样的吗!

12 楼


13 楼

牛叉

14 楼

f

15 楼

嗯,很不错!

16 楼

嗯,很不错!我以前也看过这样的帖,也想过这样做,可是上面那个,还要分班级,判断空值,分两张表,而且我是这样想的
学号为主键,职务应该是唯一的,一个班不允许有两个相同职务出现
但一个人能同时胜任多个职务
所以放弃了那种办法!

17 楼


嗯,很不错!我以前也看过这样的帖,也想过这样做,可是上面那个,还要分班级,判断空值,分两张表,而且我是这样想的
学号为主键,职务应该是唯一的,一个班不允许有两个相同职务出现
但一个人能同时胜任多个职务
所以放弃了那种办法!

18 楼

你是想在前台提取这些数据并且让那些数据按照你想要的样子排呢?
还是想在后台建多张你要求表来放那些数据啊?
如果是在前台的话后台不用建表只需要用聚合函数就可以搞定。就一个存储过程。



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 楼

如果是在后台建表的话怎么建都行不难。。。
你是想在前台提取数据吧。而且让数据照你的意排吧!
这种方法叫数据打横,也叫行列转置。
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 楼

还以为之前的帖没发出去。。。
害我多打了一遍

我来回复

您尚未登录,请登录后再回复。点此登录或注册