如何组合两个查询以获得一个结果?

时间:2017-03-15 08:29:41

标签: sql

我需要两个组合两个查询才能获得一个结果。这是第一个代码。

SELECT FKLTI_KTRGN, COUNT(DISTINCT VIEW_PELAJAR_ENROLL.MB_NAMA) AS BIL_UG 
FROM VIEW_PELAJAR_ENROLL, KOD_BANGSA, KOD_NEGERI, JANTINA, KOD_AGAMA, KOD_CACAT, TARAF_KAHWIN
WHERE KOD_KTRGN_PROGRAM = 'SARJANA MUDA'
AND MS_SESI = '2015/2016'
AND MB_BANGSA = KOD_BANGSA
AND KOD_NEGERI = MB_ASAL
AND MB_JANTINA = JAN_KOD
AND KOD_AGAMA = MB_AGAMA
AND KOD_CACAT = MB_CACAT
AND KOD_TARAF = MB_TARAF_KAHWIN
AND MS_STATUS_SEMASA IN
(SELECT SP_KOD
FROM STATUS_PELAJAR
WHERE STATUS_ENROLL = 'Y'
AND SP_TAMAT IS NULL
AND SP_KOD = MS_STATUS_SEMASA)
GROUP BY FKLTI_KTRGN

这是第二个代码。

SELECT FKLTI_KTRGN, COUNT(DISTINCT PELAJAR_BIODATA.MBUT_NAMA) AS BIL_PG
                FROM PELAJAR_BIODATA,KOD_NEGERI,FAKULTI,KOD_IJAZAH,PELAJAR_BUTIR_PENGAJIAN,STATUS_PENGAJIAN A,
                KOD_STATUS_PELAJAR_IPS, KOD_CACAT, KOD_BANGSA, E_KOD_PENGAJIAN, JANTINA, KOD_PROGRAM
                WHERE   A.STAT_STATUS IN (SELECT KOD_STATUS
                FROM KOD_STATUS_PELAJAR_IPS
                WHERE  STATUS_ENROLL='Y'
                AND KOD_STATUS=STAT_STATUS)
                AND A.STAT_NOMKPB=MBUT_NOMKPB
                AND PBP_PROGRAM IN ('5','6')
                AND MBUT_ASAL=KOD_NEGERI(+)
                AND SUBSTR(A.STAT_KOD_IJAZAH,1,1)=FKLTI_KOD
                AND PBP_PROGRAM=KOD_PROGRAM.KOD_PROGRAM
                AND A.STAT_KOD_IJAZAH=KOD_IJAZAH_UM
                AND A.STAT_NODAFTAR=PBP_NODAFTAR
                AND MBUT_CACAT=KOD_CACAT
                AND KOD_BANGSA=MBUT_BANGSA
                AND PBP_JENIS_PENGAJIAN=KOD_JNS_PENGAJIAN
                AND MBUT_JANTINA=JAN_KOD
                AND MBUT_WARGA IS NOT NULL
                AND MBUT_BANGSA IS NOT NULL
                AND MBUT_JANTINA IS NOT NULL
                AND MBUT_NEGERI IS NOT NULL
                AND PBP_PROGRAM IS NOT NULL
                AND A.STAT_STATUS=KOD_STATUS
                AND PBP_KOD_IJAZAH IS NOT NULL
                AND A.STAT_SESI||A.STAT_SEMESTER IN (SELECT MAX(B.STAT_SESI||B.STAT_SEMESTER) FROM STATUS_PENGAJIAN B
                WHERE B.STAT_NODAFTAR=A.STAT_NODAFTAR
                AND B.STAT_NOMKPB=A.STAT_NOMKPB
                AND A.STAT_SESI||A.STAT_SEMESTER=B.STAT_SESI||B.STAT_SEMESTER)
                AND A.STAT_SESI = '2015/2016'
                group by FKLTI_KTRGN

这是预期的结果:

expected result

这就是我得到的:

actual result

我尝试使用UNION但它不起作用。有人可以帮帮我吗?我真的需要你的帮助。提前谢谢!

2 个答案:

答案 0 :(得分:0)

为了使用union,您需要具有相同数量的字段和两个查询的相同字段名称。

与您的两个查询中一样,第二个字段具有不同的名称:BIL_PG,BIL_UG

答案 1 :(得分:0)

试试这个

 select * from 
    (SELECT FKLTI_KTRGN, COUNT(DISTINCT VIEW_PELAJAR_ENROLL.MB_NAMA) AS BIL_UG 
    FROM VIEW_PELAJAR_ENROLL, KOD_BANGSA, KOD_NEGERI, JANTINA, KOD_AGAMA, KOD_CACAT, TARAF_KAHWIN
    WHERE KOD_KTRGN_PROGRAM = 'SARJANA MUDA'
    AND MS_SESI = '2015/2016'
    AND MB_BANGSA = KOD_BANGSA
    AND KOD_NEGERI = MB_ASAL
    AND MB_JANTINA = JAN_KOD
    AND KOD_AGAMA = MB_AGAMA
    AND KOD_CACAT = MB_CACAT
    AND KOD_TARAF = MB_TARAF_KAHWIN
    AND MS_STATUS_SEMASA IN
    (SELECT SP_KOD
    FROM STATUS_PELAJAR
    WHERE STATUS_ENROLL = 'Y'
    AND SP_TAMAT IS NULL
    AND SP_KOD = MS_STATUS_SEMASA)
    GROUP BY FKLTI_KTRGN)

    union

    select * from (SELECT FKLTI_KTRGN, COUNT(DISTINCT PELAJAR_BIODATA.MBUT_NAMA) AS BIL_PG
                    FROM PELAJAR_BIODATA,KOD_NEGERI,FAKULTI,KOD_IJAZAH,PELAJAR_BUTIR_PENGAJIAN,STATUS_PENGAJIAN A,
                    KOD_STATUS_PELAJAR_IPS, KOD_CACAT, KOD_BANGSA, E_KOD_PENGAJIAN, JANTINA, KOD_PROGRAM
                    WHERE   A.STAT_STATUS IN (SELECT KOD_STATUS
                    FROM KOD_STATUS_PELAJAR_IPS
                    WHERE  STATUS_ENROLL='Y'
                    AND KOD_STATUS=STAT_STATUS)
                    AND A.STAT_NOMKPB=MBUT_NOMKPB
                    AND PBP_PROGRAM IN ('5','6')
                    AND MBUT_ASAL=KOD_NEGERI(+)
                    AND SUBSTR(A.STAT_KOD_IJAZAH,1,1)=FKLTI_KOD
                    AND PBP_PROGRAM=KOD_PROGRAM.KOD_PROGRAM
                    AND A.STAT_KOD_IJAZAH=KOD_IJAZAH_UM
                    AND A.STAT_NODAFTAR=PBP_NODAFTAR
                    AND MBUT_CACAT=KOD_CACAT
                    AND KOD_BANGSA=MBUT_BANGSA
                    AND PBP_JENIS_PENGAJIAN=KOD_JNS_PENGAJIAN
                    AND MBUT_JANTINA=JAN_KOD
                    AND MBUT_WARGA IS NOT NULL
                    AND MBUT_BANGSA IS NOT NULL
                    AND MBUT_JANTINA IS NOT NULL
                    AND MBUT_NEGERI IS NOT NULL
                    AND PBP_PROGRAM IS NOT NULL
                    AND A.STAT_STATUS=KOD_STATUS
                    AND PBP_KOD_IJAZAH IS NOT NULL
                    AND A.STAT_SESI||A.STAT_SEMESTER IN (SELECT MAX(B.STAT_SESI||B.STAT_SEMESTER) FROM STATUS_PENGAJIAN B
                    WHERE B.STAT_NODAFTAR=A.STAT_NODAFTAR
                    AND B.STAT_NOMKPB=A.STAT_NOMKPB
                    AND A.STAT_SESI||A.STAT_SEMESTER=B.STAT_SESI||B.STAT_SEMESTER)
                    AND A.STAT_SESI = '2015/2016'
                    group by FKLTI_KTRGN)