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
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 (
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie immer etwas zu tun:
InformationsquelleAutor Tom Micheline
Wenn das gewünschte Ergebnis ist die Summe aller Stunden für einen einzelnen Mitarbeiter-code in einer einzigen Zeile, und die zweite Abfrage nach der
UNION
wird immer nur null zurückgeben Stunden, wie es scheint, hier die beste Lösung ist, um loszuwerden, dasUNION
.EDIT: Nach weiterer Klärung, hier ist, was ich denke, das SQL sollte wohl so Aussehen:
Was es tut:
project_employee
Einträge, die in den angegebenen Datumsbereich. (Beachten Sie, dass es keine Notwendigkeit fürNULL
oderNOT NULL
Kontrollen an alle hier. Entweder das Datum ist in Reichweite, oder es ist nicht.)employee_master
Tabelle, und suchen Sie nach passenden Einträge in der gefiltert, summiertproject_employee
Unterabfrage Ergebnis eingestellt. (Da es eineLEFT JOIN
jeder Mitarbeiter in der master-Tabelle ein Eintrag vorhanden, auch wenn keine der gefilterteproject_employee
Einträge passen.)pe.hours
SpalteNULL
, wodurch dieCOALESCE
wieder auf seinen zweiten Wert null.emp_name
.Wenn Sie unterschiedliche Konditionen gibt, dann warum ist Ihr Beispiel, das denselben Mitarbeiter zweimal? Oder ist das, was die Frage ist?
Aggreed. Der zweite Abschnitt scheint nicht erforderlich, und auch, in so einer situation, eine case-Anweisung verwendet wurden, könnte als gut.
ich habe versucht, ur query.. aber seine Angabe der Fehler auf mysql.... nicht sicher, was es verursacht 🙁
Ich wurde ein paar kleine syntax-Probleme. (Extra abschließendes Komma erste
SELECT
Liste und fehlende Semikolon am Ende der Abfrage.) An dieser Stelle geht es MSSQL-syntax-checker. Ich habe keine MySQL-Instanz zum testen gegen.InformationsquelleAutor jdmichal