2017-07-13 2 views
0

ersten Abfrage:Wie drei verschiedene SQL-Abfragen verbinden gemeinsame Spalte mit

select MONTHNAME(batchStartDate) AS MONTHS, 
    MONTH(batchStartDate) AS MONTHNUMBER, 
    SUM(totalCandidatesInBatch) AS CANDIDATES_ENROLLED 
from batch 
group by MONTHS 
order by MONTHNUMBER; 

2. Abfrage:

select MONTHNAME(resultApprovedOndate) AS MONTHS, 
    MONTH(resultApprovedOndate) AS MONTHNUMBER, 
    SUM(totalCertified) AS CANDIDATES_CERTIFIED 
from batch 
where totalPass is not null AND 
    totalFail is not null AND 
    resultApprovedOnDate<=curDate() and 
    resultApprovedOnDate is not null 
group by MONTHS 
order by MONTHNUMBER; 

3. Abfrage:

select MONTHNAME(assessmentDate) AS MONTHS, 
    MONTH(assessmentDate) AS MONTHNUMBER, 
    (SUM(totalPass)+SUM(totalFail)) AS CANDIDATES_ASSESSED 
from batch 
where totalPass is not null AND 
    totalFail is not null AND 
    resultApprovedOnDate<=curDate() and 
    resultApprovedOnDate is not null 
group by MONTHS 
order by MONTHNUMBER; 

Wie Sie sehen, haben diese Abfragen die gemeinsame Spalte MONTHS und MONTHNUMBER. Ich möchte das Ergebnis dieser drei Abfragen verknüpfen. Ich habe UNION versucht, aber das funktioniert nicht.

Kann mir jemand sagen, was passiert und was könnte die Lösung sein?

OUTPUT 1. QUERY

# MONTHS, MONTHNUMBER, CANDIDATES_ENROLLED 
January,  1,  50 
February,  2,  35 
March,   3,  205 
April,   4,  85 
May,   5,  616 
June,   6,  26 

2. QUERY

# MONTHS, MONTHNUMBER, CANDIDATES_CERTIFIED 
    January,  1,   34 
    April,  4,   72 
    July,  7,   484 
    August,  8,   30 

3. QUERY

# MONTHS, MONTHNUMBER, CANDIDATES_ASSESSED 
February,  2,   101 
    March,  3,   134 
     May,  5,   32 
    July,  7,   75 
    August,  8,   75 
September,  9,   150 
    October,  10,   75 
November,  11,   77 
December,  12,   152 

Ich möchte die Ausgabe in einer Form

# MONTHS, MONTHNUMBER, CANDIDATES_ENROLLED, CANDIDATES_CERTIFIED, CANDIDATES_ASSESSED 

und auch angezeigt werden, wenn eine Tabelle eine Zeile hat fehlt dann sollte der Wert mit Null oder null.Ex- 3. Ausgabe der Abfrage Im Januar Kandidaten beurteilt fehlt gefüllt werden dann sollte 0 oder null sein.

+0

https://dev.mysql.com/doc/ refman/5.7/de/union.html –

+0

Haben Sie versucht, JOIN zu verwenden? lol – Maxqueue

+2

Beispieldaten und erwartete Ausgabe wäre hilfreich. Es ist schwer zu wissen, ob Sie gleich Monate in einzelne Datensätze ('JOIN') oder mehrere Datensätze (' UNION') zusammenfassen möchten. –

Antwort

0

Blick auf diesen Link: https://www.w3schools.com/sql/sql_join.asp

Es zeigt Ihnen die verschiedenen Arten von Verknüpfungen (Ich gehe davon aus Sie eine „join“ tun wollen).

Union wird verwendet, um zwei oder mehr Sätze übereinander zu kombinieren.

Sie verwenden beitreten können auf einer zugehörigen Spalte zwischen den Tabellen join basierend

0

Ich denke, das mit einer einzigen Abfrage durchgeführt werden kann:

select MONTHNAME(batchStartDate) AS `MONTHS`, 
    MONTH(batchStartDate) AS `MONTHNUMBER`, 
    SUM(totalCandidatesInBatch) AS `CANDIDATESE_ENROLLED`, 
    SUM(
     IF(NOT(totalFail IS NULL) AND 
      NOT(totalFail IS NULL) AND 
      resultApprovedOnDate <= curDate() AND 
      NOT(resultApprovedOnDate is null), 
      totalCertified, 
      0 
     ) AS `CANDIDATESE_CERTIFIED`, 
    SUM(
     IF(NOT(totalFail IS NULL) AND 
      NOT(totalFail IS NULL) AND 
      resultApprovedOnDate <= curDate() AND 
      NOT(resultApprovedOnDate is null), 
      totalPass + totalFail, 
      0 
     ) AS `CANDIDATESE_ASSESSED` 
from batch 
group by MONTHS 
order by MONTHNUMBER; 
+0

Syntaxfehler erhalten Bitte überprüfen Sie –

+0

Was ist der Syntaxfehler, den Sie sehen? –

Verwandte Themen