描述  
一个表 有字段
sfid (主键) xbm (性别代码) sxlbm(学生类别码 分博士 硕士)dwbh (院系编号)。等其他字段 表名 vw_xsjb
一个DM_GB_XB表 里面
DM MC
1  男
2  女
9  其他
性别表一个DM_GB_RYSXLB表
DM  MC
21  硕士
25  博士要求求出
每个院系的男女博硕士的人数
 
每个院系系有4行记录 不管有没有记录

解决方案 »

  1.   

    vw_xsjb表里不含性别和学位信息吗?那么sxlbm(学生类别码 分博士 硕士)是什么
    性别还有其他
      

  2.   

    select a.dwbh,
      count(case when b.mc='男' and c.mc='硕士' then 1 end)男硕士,
      count(case when b.mc='女' and c.mc='硕士' then 1 end)女硕士,
      count(case when b.mc='男' and c.mc='博士' then 1 end)男博士,
      count(case when b.mc='女' and c.mc='博士' then 1 end)女博士
    from vw_xsjb a,DM_GB_XB b,DM_GB_RYSXLB c
    where a.sfid=b.dm(+)
      and a.sfid=c.dm(+)
    group by a.dwbh
      

  3.   

    不是 我只是说了几个主要要用的字段
    其实一个表就可以  就是根据 那 DWBH(院系编号)  XBM(性别码)  SXLBM(学生类别)来求人数 报表大体是这样的 
               博士                 硕士
    系所    男      女   合计    男       女   合计物理系
    。。



      

  4.   

    select a.dwbh,
      count(case when a.xbm='男' and a.sxlbm='博士' then 1 end)男博士,
      count(case when a.xbm='女' and a.sxlbm='博士' then 1 end)女博士,
      count(decode(a.sxlbm,'博士',1))合计1,
      count(case when a.xbm='男' and a.sxlbm='硕士' then 1 end)男硕士,
      count(case when a.xbm='女' and a.sxlbm='硕士' then 1 end)女硕士,
      count(decode(a.sxlbm,'硕士',1))合计2
    from vw_xsjb a
    group by a.dwbh应该不是4条记录是4个字段吧..
      

  5.   

    谢谢您 基本差不多  剩下的我在改改
    随便请教下您 where a.sfid=b.dm(+)  这句话不太明   sfid是学生的身份ID  dm只是一个性别的代码
    可能你不 知道表吧  但这个(+)是什么意思
      

  6.   

    where a.sfid=b.dm(+)  相当于vw_xsjb a left join DM_GB_XB b on a.sfid=b.dm
      

  7.   

    (+)代表外连接
    a.sfid=b.dm(+) 是左外连接,将a表中不符合a.sfid=b.dm的记录也取出来
      

  8.   

    SELECT
    A.DWBH,
    B.XBM,
    B.SXLBM,
    NVL(A.CNT,0) AS CNT
    FROM
    (
    SELECT
    DWBH,
    XBM,
    SXLBM,
    COUNT(*) AS CNT
    FROM
    VM_XSJOB VX
    GROUP BY
    VX.DWBH,
    VX.XBM,
    VX.SXLBM
    ) A,
    (
    SELECT
    DGR.DM AS RDM,
    DGX.DM AS XDM
    FROM
    DM_GB_RYSXLB DGR,
    DM_GB_XB DGX
    ) B
    WHERE
    A.XBM = B.XDM(+) AND
    A.SXLBM = B.RDM(+)
    核心是  笛卡尔积