SQL Subqueries und Group By

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.252
Nabend,

stehe gerade vor einem (für mich) massiven Problem auf einem MS SQL Server :freak:
Ich lese eine riesige Datenbank von Druckjobs aus um diese verschiedenen Geräten, Abteilungen, usw. zuzuordnen. Das Grundgerüst steht, jedoch bekomme ich es nicht hin alle Daten in einer einzigen Query abzufragen.

Ziel ist eine Ergebnistabelle pro Gerät nach dem Muster:
Code:
Ergebnistabelle für Gerät xyz:
- Abteilung
- SWseiten
- Farbseiten
- Gesamtseiten


Vereinfacht kann man sich die Daten so vorstellen (sind eigentlich 7 verknüpfte Tabellen):
Code:
Tabelle Jobs:
- ID (Primary)
- Abteilung (Die ID einer Abteilung)
- Farbe (1=SW, 2-4=Farbe)
- Seitenzahl (Anzahl gedruckter Seiten)
- Geraet (Die ID des Druckers)

Lösungswege habe ich bereits mehrere probiert, hier mal ein paar davon:
1.: Farben per CASE vereinheitlichen:
Code:
SELECT [Jobs].Abteilung
      ,(CASE [Farbe] WHEN 1 THEN 'SW' ELSE 'Farbe' END) as Color
      ,sum ([Anzahl]) as Anzahl
FROM [test].[dbo].[Jobs]
WHERE [Jobs].Geraet=xyz
GROUP By [Jobs].Abteilung, Farbe
Problem: Am Ende erhalte ich trotzdem mehrere Zeilen pro Abteilung, wenn in der Spalte Farbe z.B. bei einem Job 2 und bei einem anderen 3 stand...

2.: Per Subquery:
Code:
SELECT [Jobs].Abteilung as Abtl
      ,(SELECT sum(Job.Anzahl) FROM [test].[dbo].Jobs as Job WHERE Farbe=1 AND Abt.ID=Abtl.ID) as Anzahl_SW
      ,(SELECT sum(J.Anzahl) FROM [test].[dbo].Jobs as J WHERE Farbe>1 AND Farbe<5 AND A.ID=Abtl.ID) as Anzahl_Farbe
FROM [test].[dbo].[Jobs]
GROUP BY [Jobs].Abteilung
Problem: Will er garnicht ausführen... The multi-part identifier "Abt.ID" could not be bound. (selbiges auch für Abtl.ID und A.ID)

Habe natürlich schon Syntax verändert, andere Wege probiert, gegooglet - mittlerweile weiß ich jedoch nicht mehr weiter und hoffe dass ihr mir hier schneller ans Ziel helfen könnt

Freue mich schon auf Antworten :)

Gruß
 
Code:
SELECT [Jobs].Abteilung
      ,(CASE [Farbe] WHEN 1 THEN 'SW' ELSE 'Farbe' END) as Color
      ,sum ([Anzahl]) as Anzahl
FROM [test].[dbo].[Jobs]
WHERE [Jobs].Geraet=xyz
GROUP By [Jobs].Abteilung,(CASE [Farbe] WHEN 1 THEN 'SW' ELSE 'Farbe' END)


die group by anweisung sollte immer mit dem select übereinstimmen
 
te one schrieb:
Problem: Will er garnicht ausführen... The multi-part identifier "Abt.ID" could not be bound. (selbiges auch für Abtl.ID und A.ID)
Das liegt daran, dass du Abt und A nirgendwo definiert hast. Abt1 kannst du auch nicht verwenden, da es in diesem Kontext noch nicht existiert. Du müsstest statt dessen [Jobs].Abteilung benutzen. Du müsstest auch nicht verschiedene Bezeichner "J" und "Job" in den beiden Subqueries benutzen, da die diese in ihrem eigenen Kontext laufen.

Ansonsten +1 zu riddickxs Lösung.
 
riddickx schrieb:
group by anweisung sollte immer mit dem select übereinstimmen

Achja da war mal was :rolleyes: Dankeschön, werde es morgen auf Arbeit mal testen :)
Ergänzung ()

Optimal, das war das Problem. Jetzt kann alles abgerechnet werden :)

Vielen Dank
 
Zurück
Oben