1、 成绩表(CJB) 
课程号(kch)  课程名(kcm)  学号(xh) 学分(xf)  学时(xs)  课程属性(kcsx)  考试成绩(kscj) 
2、学籍表(XJB) 
学号(XH)  姓名(XM)  性别(XB)  系所号(XSH)  专业方向(ZYFX) 班名(BM) 所属年级(SSNJ) 
3、系所表(XSB) 
系所号(XSH)   系所名(XSM) 
4、学分绩点(XFJ) 
   绩点号(JDH)  绩点数(JDS) 下限分(XXF) 上限分(SXF) 
JDH       JDS       XXF       SXF BZ 
--- --------- --------- --------- -------------- 
  1         4        90       100 A(优) 
  2       3.7        87      89.9 A- 
  3       3.3        84      86.9 B+ 
  4         3        81      83.9 B(良) 
  5       2.7        78      80.9 B- 
  6       2.3        75      77.9 C+ 
  7         2        72      74.9 C(中) 
  8       1.7        69      71.9 C- 
  9       1.3        66      68.9 D+ 
 10         1        60      65.9 D 
 12         0         0      59.9 F(不及格)         
如何用sql语句生成如下的形式呢? 
系别  学号  性别 专业  层次  必修课学分  限选课学分  任选课学分(通识、复合) 任选课学分(教育类) 重修课程门次 重修课程学分  平均学分绩点 
注:任选课(通识、复合)课程名里都有“复合”二字  ,任选课(教育类)课程号前面是"JY" 
   平均绩点计算方式为:每门课程绩点*学分/总学分 

解决方案 »

  1.   

    没测试
    select XSB.XSM as 系别,XJB.XH as 学号,XJB.XB  as 性别,XJB.ZYFX as 专业,
    sum(case when instr(x.kcm,'复合')!=-1 then x.JDS else 0 end )  as 任选课学分(通识、复合),
    sum(case when instr(x.kch,'JY')!=-1 then x.JDS else 0 end ) as 任选课学分(教育类),
    x.JDS*xf/sum(xf) as 平均学分绩点 
    from XSB ,XJB,(select CJB.kcm,CJB.kscj,CJB.xf,max(JDS) as JDS from CJB,XFJ where CJB.kscj>=XFJ.XXF and CJB.kscj<=SXF group by CJB.kcm,CJB.kscj,CJB.xf) x
    where XSB.XSH = XJB.XSH and XJB.XH = CJB.XH
    group by XSB.XSM ,XJB.XH,XJB.XB ,XJB.ZYFX 
    你的  层次  必修课学分  限选课学分 重修课程门次 重修课程学分 
    这几个怎么区分的啊?
      

  2.   

    对不起,原来忘了一些字段,现将内容重新帖出来,层次指的是学籍表里的培养方式(本科,专科)
    还有就是成绩表里还有一个重修,补考标志字段(CXBKBZ)成绩表(CJB)结构列名                          可空值否   类型               备注
    ------------------------------- -------- ----
    KCH                             NOT NULL VARCHAR2(10)       课程号
    KCM                                      VARCHAR2(50)       课程名
    KXH                                      NUMBER(4)          课序号
    XH                              NOT NULL VARCHAR2(12)       学号
    XNXQ                                     VARCHAR2(11)       学年学期
    XF                                       NUMBER(5,1)        学分
    XS                                       NUMBER(4,1)        学时数
    KCSX                                     VARCHAR2(4)        课程属性
    KSCJ                                     NUMBER(5,1)        考试成绩
    CXBKBZ                                   VARCHAR2(4)     成绩补考备注(补考,重修,辅修)...学籍表(XJB)结构:列名                          可空值否   类型            备注
    ------------------------------- -------- ----
    XH                              NOT NULL VARCHAR2(12)    学号
    XM                              NOT NULL VARCHAR2(40)    姓名
    XB                                       VARCHAR2(2)     性别
    XSH                                      VARCHAR2(5)     系所号
    ZYH                                      VARCHAR2(8)     专业号
    ZYFX                                     VARCHAR2(30)    专业方向(专业名)
    BM                                       VARCHAR2(10)    班级名称
    RXNJ                                     VARCHAR2(4)     入学年级
    SSNJ                                     VARCHAR2(4)     所属年级
    PYFS                                     VARCHAR2(20)    培养方式(层次)
    CXBKBZ                                   VARCHAR2(4)     成绩补考备注(补考,重修,辅修)
    ...系所表(XSB)结构:列名                          可空值否   类型             备注
    ------------------------------- -------- ----
    XSH                             NOT NULL VARCHAR2(5)      系所号
    XSM                                      VARCHAR2(30)     系所名称学分绩点转化表(XFJ)结构: 列名                          可空值否   类型
     ------------------------------- -------- ----
     JDH                             NOT NULL NUMBER(2)
     JDS                                      NUMBER(2,1)
     XXF                                      NUMBER(5,1)
     SXF                                      NUMBER(5,1)
     BZ                                       VARCHAR2(20)   
    以下是XFJ内的数据(各课程成绩通过这张表转换):JDH       JDS       XXF       SXF BZ 
    --- --------- --------- --------- -------------- 
      1         4        90       100 A(优) 
      2       3.7        87      89.9 A- 
      3       3.3        84      86.9 B+ 
      4         3        81      83.9 B(良) 
      5       2.7        78      80.9 B- 
      6       2.3        75      77.9 C+ 
      7         2        72      74.9 C(中) 
      8       1.7        69      71.9 C- 
      9       1.3        66      68.9 D+ 
     10         1        60      65.9 D 
     12         0         0      59.9 F(不及格)        如何用sql语句生成如下的形式呢? 
    系别  学号  性别 专业  培养层次  必修课学分  限选课学分  任选课学分(通识、复合) 任选课学分(教育类) 重修课程门次 重修课程学分  平均学分绩点 
    注:任选课(通识、复合)课程名里都有“复合”二字  ,任选课(教育类)课程号前面是"JY" 
       平均绩点计算方式为:每门课程绩点*学分/总学分 
    培养层次就是学籍表里培养方式字段里的值.解释:学分是根据教学计划制定出来的,每门课程的学分不一样,每门课程的绩点是根据成绩转化出来的,比如90-100是4,60以下没有绩点,就是这样.
      

  3.   

    我没有权限修改帖子,所以再写一个纠正:学籍表里没有CXBKBZ这个字段
      

  4.   

    下面的 sql应该差不多了
    先试下,有问题自己修改下,或者再说
    select XSB.XSM as 系别,XJB.XH as 学号,XJB.XB  as 性别,XJB.ZYFX as 专业,XJB.PYFS as 培养方式(层次),
    sum(case when instr(x.kcm,'复合')!=-1 then x.JDS else 0 end )  as 任选课学分(通识、复合),
    sum(case when instr(x.kch,'JY')!=-1 then x.JDS else 0 end ) as 任选课学分(教育类),
    重修成绩,重修课程门次,
    x.JDS*xf/sum(xf) as 平均学分绩点 
    from XSB ,XJB,
    (select CJB.kcm,CJB.kscj,CJB.xf,count(decode(CJB.CXBKBZ,'重修',1,null)) as 重修课程门次,
    sum(decode(CJB.CXBKBZ,'重修',XFJ.JDS,0)) as 重修成绩,max(XFJ.JDS) as JDS 
    from CJB,XFJ where CJB.kscj> =XFJ.XXF and CJB.kscj <=SXF group by CJB.kcm,CJB.kscj,CJB.xf) x
    where XSB.XSH = XJB.XSH and XJB.XH = CJB.XH
    group by XSB.XSM ,XJB.XH,XJB.XB ,XJB.ZYFX  
      

  5.   

    select CJB.kcm,CJB.kscj,CJB.xf,count(decode(CJB.CXBKBZ,'重修',1,null)) as 重修课程门次, 
    sum(decode(CJB.CXBKBZ,'重修',XFJ.JDS,0)) as 重修成绩,max(XFJ.JDS) as JDS  
    from CJB,XFJ where CJB.kscj>  =XFJ.XXF and CJB.kscj  <=SXF group by CJB.kcm,CJB.kscj,CJB.xf
    这段是不是把成绩转化为绩点呢?这可以运行,可是整段运行总是说最后where XSB.XSH = XJB.XSH and XJB.XH = CJB.XH 中xjb.xh列名无效