2 Selectbefehle aus einer Tabelle nebeneinander anzeigen

leon23m

Grünschnabel
Hallo,

ich suche nach eine Lösung wie ich 2 SELECT Befehle zur einer Tabelle zusammenführen kann. Die zwei Befehle suchen in der gleichen Tabelle. Der zweite Select Befehl hat noch zusätzliche Suchkriterien. Beide sollen nach Monate gruppiert werden. Ich habe mein Beispiel mal beigefügt. Ergebnis1 und Ergebnis2 sollen nebeneinander stehen mit der Spalte Monat. Die masch_nr wäre nicht wichtig. Ich nutze MS SQL.
Vielen Dank im vorraus.

2 Select.PNG

Gruß

Rene
 
Lösung
Ich habs geschafft dank ComFreek. Ich musste das zweite With weglassen und nur durch ein Komma trennen.
Hier wie es funktioniert hat.

SQL:
WITH Ergebnis1_Tabelle (masch_nr, Ergebnis1, Monat)
AS
(SELECT masch_nr, SUM(gut_pri), MONTH(begin_ts)
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr = 'FIMI3'
GROUP BY masch_nr, MONTH(begin_ts)
),

Ergebnis2_Tabelle (masch_nr, Ergebnis2, Monat)
AS
(SELECT masch_nr, SUM(dauer), MONTH(begin_ts)
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr = 'FIMI3'
AND bmktonr IN ('1','2','3','4','5','6','7','8','9','10','11')
GROUP BY masch_nr, MONTH(begin_ts)
)

SELECT Ergebnis1.masch_nr, Ergebnis1.Monat, Ergebnis1, Ergebnis2
FROM Ergebnis1_Tabelle AS Ergebnis1
FULL OUTER JOIN Ergebnis2_Tabelle AS Ergebnis2 ON Ergebnis1.masch_nr =...
Du könntest auch einfach die zwei Tabellen via einem JOIN zusammenführen. Leider hast du den Code als Screenshot gepostet, sonst hätte ich ihn dir abgewandelt.
 
Ok damit kann ich dienen.


SELECT masch_nr, SUM(gut_pri) as Ergebnis1, MONTH(begin_ts) as Monat
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr='FIMI3'
GROUP BY masch_nr, MONTH(begin_ts)

SELECT masch_nr,SUM(dauer) as Ergebnis2, MONTH(begin_ts) as Monat
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr='FIMI3'
AND bmktonr IN ('1','2','3','4','5','6','7','8','9','10','11')
GROUP BY masch_nr, MONTH(begin_ts)


Gruß
Rene
 
Bitte Codetags nutzen, siehe meine Signatur. Ich habe es dir in deinem Beitrag mal gefixt.

SQL:
WITH Ergebnis1_Tabelle (masch_nr, Ergebnis1, Monat)
AS
(SELECT masch_nr, SUM(gut_pri), MONTH(begin_ts)
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr = 'FIMI3'
GROUP BY masch_nr, MONTH(begin_ts)
)

WITH Ergebnis2_Tabelle (masch_nr, Ergebnis2, Monat)
AS
(SELECT masch_nr, SUM(dauer), MONTH(begin_ts)
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr = 'FIMI3'
AND bmktonr IN ('1','2','3','4','5','6','7','8','9','10','11')
GROUP BY masch_nr, MONTH(begin_ts)
)

SELECT Ergebnis1.masch_nr, Ergebnis1.Monat, Ergebnis1, Ergebnis2
FROM Ergebnis1_Tabelle AS Ergebnis1
FULL OUTER JOIN Ergebnis2_Tabelle AS Ergebnis2 ON Ergebnis1.masch_nr = Ergebnis2.masch_nr AND Ergebnis1.Monat = Ergebnis2.Monat

Schau mal, ob das liefert, was du möchtest. Bitte überprüfe, ob meine FULL OUTER JOIN-Bedingung auch deiner gewünschten Semantik entspricht. Aktuell werden deine ursprünglichen "Ergebnis1" und "Ergebnis2" Spalten nur nebeneinander mit befüllten Werte gestellt, wenn in deren Zeilen masch_nr und Monat übereinstimmen. Falls nicht, werden die Spalten aus einer der beiden Subtabellen mit NULL befüllt.
Guck mal hier, falls dir das zu kryptisch klingt: FULL OUTER JOIN – Join (SQL) – Wikipedia. Grafisch ist es einfacher zu verstehen.
 
Ich habs geschafft dank ComFreek. Ich musste das zweite With weglassen und nur durch ein Komma trennen.
Hier wie es funktioniert hat.

SQL:
WITH Ergebnis1_Tabelle (masch_nr, Ergebnis1, Monat)
AS
(SELECT masch_nr, SUM(gut_pri), MONTH(begin_ts)
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr = 'FIMI3'
GROUP BY masch_nr, MONTH(begin_ts)
),

Ergebnis2_Tabelle (masch_nr, Ergebnis2, Monat)
AS
(SELECT masch_nr, SUM(dauer), MONTH(begin_ts)
FROM [hydra1].[hydadm].[v_ereignis]
WHERE masch_nr = 'FIMI3'
AND bmktonr IN ('1','2','3','4','5','6','7','8','9','10','11')
GROUP BY masch_nr, MONTH(begin_ts)
)

SELECT Ergebnis1.masch_nr, Ergebnis1.Monat, Ergebnis1, Ergebnis2
FROM Ergebnis1_Tabelle AS Ergebnis1
FULL OUTER JOIN Ergebnis2_Tabelle AS Ergebnis2 ON Ergebnis1.masch_nr = Ergebnis2.masch_nr AND Ergebnis1.Monat = Ergebnis2.Monat

Vielen Dank......
 
Zuletzt bearbeitet von einem Moderator:
Lösung
Zurück