Wie man die Abfrage auf eine andere Abfrage-Ergebnis?

Habe ich ein problem, da bin ich nicht so stark auf Abfragen.

Habe ich eine Abfrage aus einem Zusammenschluss von zwei select-Abfragen :

   SELECT em.emp_code,  
          em.emp_name,  
          COALESCE(SUM(pe.hours_allotted),0) AS hours,  
          pe.dated 
     FROM employee_master em
LEFT JOIN project_employee pe ON (pe.Emp_code = em.emp_code)
    WHERE (dated >= '2011-03-14'
      AND dated < '2011-03-20' ) 
       OR dated IS NULL 
 GROUP BY em.emp_code 
UNION
  (SELECT em.emp_code,
          em.emp_name,
          '0' AS hours,
          pe.dated
     FROM employee_master em
LEFT JOIN project_employee pe ON (pe.Emp_code = em.emp_code)
    WHERE (dated >= '2011-03-14'
      AND dated < '2011-03-20' ) 
       OR dated IS NOT NULL 
 GROUP BY em.Emp_code)
ORDER BY emp_name;

Nun die Ergebnismengen zurückgeben zum Beispiel als:

ecode  ename    hours 
----------------------
201   Alak basu  10 
201 alak basu    0

Wird das erste Ergebnis aus dem ersten select-Anweisung in der union, wo Stunden = 10
und Stunden = 0 aus der zweiten select-Anweisung union.

Was ich will, ist:

ecode     ename       hours 
----------------------------
201      alak basu     10

Wie in dem Fall sollte es nur ein Ergebnis pro ecode. Wie die Gruppe es gern Summierung der Stunden als Gruppe von ecode so, dass es mich gibt nur ein Ergebnis wie oben beschrieben?

Warum sind Ihre Daten so gebrochen, als den gleichen Namen haben zweimal mit unterschiedlicher groß - / Kleinschreibung?
Ich fühle mich wie es ist ein Logik-Fehler, die hier angegangen werden muss. Wenn ein Mitarbeiter hat eine dated Feld innerhalb des vorgegebenen Zeitrahmens, wird es passen beide Abfragen, und auf beide Seiten der union. Ich habe das Gefühl, dass dies nicht beabsichtigt. Was ist genau der beabsichtigte Effekt dieser Abfrage?
eigentlich d beabsichtigt war, haben wir eine Teilnahme basiert, was wir haben, bevölkern auf einer täglichen basis, wer arbeitet wie viele Stunden .... jetzt für die Zeit, als wir brauchten, um zu wissen, dass im Datum vom 14. März bis 19. März .. wie viele Menschen tatsächlich arbeiten whoz Arbeitszeit mehr als 6 Stunden .... (Hinweis : nur die Mitarbeiter in der Projekt-Mitarbeiter, die für uns arbeiten, besonders am Tag..)
so thts d Grund der vom Feld trotz der left join war null.... aber davon abgesehen... deren datiert Feld nicht null.. und auch Sie haben gearbeitet, mehr als 6 Stunden ... also musste ich brechen Sie die Logik in zwei Teile, weil die, die ich benötigt d union kann ich nicht b sagen können, die ganze Sache richtig, aber das ist d tatsächliche Szenario
Ja, aber wenn Sie nur lassen Sie keine Stunden durch einen Mitarbeiter (NULL), die COALESCE konvertieren wird es auf null. Da du eine LEFT JOIN jeder Mitarbeiter vertreten werden, und wenn Sie nicht über eine passende project_employees Reihe, Ihre Stunden werden NULL. So, wieder, der zweite Teil der UNION tut man nicht alles. Siehe meine Antwort für ein update der SQL Aussehen sollte.

InformationsquelleAutor Joy | 2011-03-18

Schreibe einen Kommentar