2017-03-15 5 views
0

Ich brauche zwei kombinieren zwei Abfragen, um nur ein Ergebnis zu erhalten. Hier ist der erste Code.Wie kombinieren Sie zwei Abfragen, um ein Ergebnis zu erhalten?

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 

Und das ist der zweite Code.

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 

Dies ist das erwartete Ergebnis:

expected result

Dies ist, was ich bekommen:

actual result

Ich habe versucht UNION zu verwenden, aber es funktioniert nicht . Kann mir jemand helfen? Ich brauche wirklich deine Hilfe. Vielen Dank im Voraus!

+0

Wie genau 'union' nicht für Sie arbeiten? Beide Abfragen geben zwei Spalten desselben Typs zurück - also sollte union * funktionieren *. –

+0

UNION sollte funktionieren, welchen Fehler haben Sie bekommen? Aber was möchten Sie, könnten Sie Beispielausgabe für jede Abfrage und erwartetes Ergebnis für diese Beispielausgabe zeigen? –

+0

Fügen Sie für jede Abfrage ein Beispielergebnis hinzu und zeigen Sie uns auch das kombinierte Ergebnis - alles gut formatierte Texte! – jarlh

Antwort

0

Um Union zu verwenden, müssen Sie die gleiche Anzahl von Feldern und den gleichen Feldnamen der beiden Abfragen haben.

wie in beiden Abfragen von Ihnen, hat das zweite Feld unterschiedliche Namen: BIL_PG, BIL_UG

+0

Spaltennamen sind nicht wichtig, nur Zahlen/Reihenfolge und Spaltentypen sollten übereinstimmen. Spaltennamen aus der ersten Abfrage werden als Spaltennamen für das Ergebnis verwendet. –

0

Versuchen Sie, diese

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) 
+0

Wie kann das Verschieben von Abfragen in Unterabfragen in dieser speziellen Situation helfen? –

+0

kann es Probleme mit distinct geben und zählen – Vecchiasignora

+0

Es kann kein solches Problem geben. 'count (distinct ...)' beeinflusst nicht die Kombination von Abfragen mit 'union' in irgendeiner Art. –

Verwandte Themen