描述
一个表 有字段
sfid (主键) xbm (性别代码) sxlbm(学生类别码 分博士 硕士)dwbh (院系编号)。等其他字段 表名 vw_xsjb
一个DM_GB_XB表 里面
DM MC
1 男
2 女
9 其他
性别表一个DM_GB_RYSXLB表
DM MC
21 硕士
25 博士要求求出
每个院系的男女博硕士的人数
每个院系系有4行记录 不管有没有记录
一个表 有字段
sfid (主键) xbm (性别代码) sxlbm(学生类别码 分博士 硕士)dwbh (院系编号)。等其他字段 表名 vw_xsjb
一个DM_GB_XB表 里面
DM MC
1 男
2 女
9 其他
性别表一个DM_GB_RYSXLB表
DM MC
21 硕士
25 博士要求求出
每个院系的男女博硕士的人数
每个院系系有4行记录 不管有没有记录
性别还有其他
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
其实一个表就可以 就是根据 那 DWBH(院系编号) XBM(性别码) SXLBM(学生类别)来求人数 报表大体是这样的
博士 硕士
系所 男 女 合计 男 女 合计物理系
。。
。
。
。
。
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个字段吧..
随便请教下您 where a.sfid=b.dm(+) 这句话不太明 sfid是学生的身份ID dm只是一个性别的代码
可能你不 知道表吧 但这个(+)是什么意思
a.sfid=b.dm(+) 是左外连接,将a表中不符合a.sfid=b.dm的记录也取出来
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(+)
核心是 笛卡尔积