2016-08-02 104 views
-2
select * 
from 
(
    select temp.agamaid, temp.jum_peg, nvl(temp.jeniskelamin,'L') jeniskelamin, 
      case when temp.jeniskelamin = 'L' then 1 
       when temp.jeniskelamin = 'P' then 2 
       else 0 
      end as num 
    from 
    (
     select agama.agamaid, AGAMA.agama, PEGAWAI.jeniskelamin, 
       count(PEGAWAI.pegawaiid) jum_peg 
     from agama 
      left join pegawai on PEGAWAI.agamaid = AGAMA.agamaid 
     group by AGAMA.agamaid, AGAMA.agama, PEGAWAI.jeniskelamin 
    ) temp 
) temp 
    left join master_jeniskelamin mjk on temp.jeniskelamin = mjk.id_jk 
order by temp.agamaid, temp.jeniskelamin 

该查询只给我这样一个结果:如何在此查询中插入临时表(不插入表)?

Not my expectation output

但我想结果是,在agamaid(3,4,5)也有另一种jeniskelamin它已没有尚未。

请问您能帮我吗? :)

回答

0

试试这个:

SELECT 
    a.agamaid, 
    COUNT(p.pegawaiid) AS jum_peg, 
    p.jeniskelamin, 
    CASE 
     WHEN p.jeniskelamin = 'L' THEN 1 
     WHEN p.jeniskelamin = 'P' THEN 2 
     ELSE 0 
    END AS num, 
    mjk.id_jk 
FROM 
    master_jeniskelamin mjk 
    CROSS JOIN agama a 
    LEFT JOIN pegawai p 
     ON p.jeniskelamin = mjk.id_jk 
     AND p.agamaid = a.agamaid 
GROUP BY 
    a.agamaid, 
    mjk.id_jk, 
    p.jeniskelamin 
ORDER BY 
    a.agamaid, 
    mjk.id_jk