SQL - Abfrage - Mehrere JOINS - Zusätzliche unterabfrage mit Group By
Hallo Leute,
ich habe mal wieder ein Problem mit einer SQL Abfrage. Es geht hierbei um Übersicht zur Netzwerkdokumentation, wofür ich meine bestehende Abfrage erweitern möchte um ein Feld Arbeitsspeicher.
Hier meine bisherige Abfrage, die auch eigentlich funktioniert aber einen großen Schönheitsfehler hat.
SELECT T1.Hostname, T1.IpOnline,
T2.ScanDate, T2.docuID,
T3.OS, T3.OSArchitecture, t3.LicenseKey AS WindowsLizenz,
T4.SoftwareLicenseKey AS MSOFFICE_Lizenz, T4.SoftwareName AS MSOFFICE,
T5.DeviceID, T5.DocuID, T5.DeviceType,
t6.DeviceID, t6.Capacity
FROM tHosts T1
Left Outer JOIN tDocu T2 on T1.HostID = T2.HostID
Left Outer JOIN tDocuWindows T3 on t2.DocuID = T3.DocuID
Left Outer JOIN (SELECT * FROM tSoftware WHERE SoftwareName LIKE 'Microsoft Office%' AND Softwarename NOT LIKE '%Visio%') T4 on t4.DocuID =T2.DocuID
LEFT Outer JOIN tDevices T5 on T3.DocuID = T5.DocuID
LEFT Outer JOIN tRAM T6 on T6.DeviceID = t5.DeviceID
WHERE T2.Archiv = 0
AND T1.HostTypeID = 1
AND T5.DeviceType = 1
eine Anmerkung noch:
Die Datenbank hält die einzelnen Komponenten der Hardware vor. Sprich wenn ein Rechner zwei Riegel Arbeitsspeicher (z.B. 2 x 2 Riegen á 4 GB) hat, habe ich zwei Einträge in der Tabelle tRAM für den Rechner á 4 GB.
und so wird es mir auch ausgeben:
Rechner1 IP 4GB
Rechner1 IP 4GB
ich würde jedoch gern die Zeilen zusammenfassen.
Ich bekomme es jedoch in die Abfrage im Gesamten hineingebaut.
Einzeln bekomme ich es hin:
Select t1.DocuID, sum(t2.capacity) from tdevices T1, tram T2 Where T2.DeviceID = T1.DEviceID group by T1.DocuID, T2.Capacity order by T1.DocuID
So bekomme ich pro DocuID eine Ausgabe. Bei einem Client, welchen ich kontrolliert habe, hat der Wert auch gepasst. Allerdings bekomme ich es irgendwie nicht hin, es in meine bestehende Auswertung zu packen.
Hoffe ihr könnt mir helfen. Danke schon mal
ich habe mal wieder ein Problem mit einer SQL Abfrage. Es geht hierbei um Übersicht zur Netzwerkdokumentation, wofür ich meine bestehende Abfrage erweitern möchte um ein Feld Arbeitsspeicher.
Hier meine bisherige Abfrage, die auch eigentlich funktioniert aber einen großen Schönheitsfehler hat.
SELECT T1.Hostname, T1.IpOnline,
T2.ScanDate, T2.docuID,
T3.OS, T3.OSArchitecture, t3.LicenseKey AS WindowsLizenz,
T4.SoftwareLicenseKey AS MSOFFICE_Lizenz, T4.SoftwareName AS MSOFFICE,
T5.DeviceID, T5.DocuID, T5.DeviceType,
t6.DeviceID, t6.Capacity
FROM tHosts T1
Left Outer JOIN tDocu T2 on T1.HostID = T2.HostID
Left Outer JOIN tDocuWindows T3 on t2.DocuID = T3.DocuID
Left Outer JOIN (SELECT * FROM tSoftware WHERE SoftwareName LIKE 'Microsoft Office%' AND Softwarename NOT LIKE '%Visio%') T4 on t4.DocuID =T2.DocuID
LEFT Outer JOIN tDevices T5 on T3.DocuID = T5.DocuID
LEFT Outer JOIN tRAM T6 on T6.DeviceID = t5.DeviceID
WHERE T2.Archiv = 0
AND T1.HostTypeID = 1
AND T5.DeviceType = 1
eine Anmerkung noch:
Die Datenbank hält die einzelnen Komponenten der Hardware vor. Sprich wenn ein Rechner zwei Riegel Arbeitsspeicher (z.B. 2 x 2 Riegen á 4 GB) hat, habe ich zwei Einträge in der Tabelle tRAM für den Rechner á 4 GB.
und so wird es mir auch ausgeben:
Rechner1 IP 4GB
Rechner1 IP 4GB
ich würde jedoch gern die Zeilen zusammenfassen.
Ich bekomme es jedoch in die Abfrage im Gesamten hineingebaut.
Einzeln bekomme ich es hin:
Select t1.DocuID, sum(t2.capacity) from tdevices T1, tram T2 Where T2.DeviceID = T1.DEviceID group by T1.DocuID, T2.Capacity order by T1.DocuID
So bekomme ich pro DocuID eine Ausgabe. Bei einem Client, welchen ich kontrolliert habe, hat der Wert auch gepasst. Allerdings bekomme ich es irgendwie nicht hin, es in meine bestehende Auswertung zu packen.
Hoffe ihr könnt mir helfen. Danke schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 285345
Url: https://administrator.de/forum/sql-abfrage-mehrere-joins-zusaetzliche-unterabfrage-mit-group-by-285345.html
Ausgedruckt am: 25.12.2024 um 02:12 Uhr
4 Kommentare
Neuester Kommentar
Dann hol Dir im CTE einfach die Tabelle tDevices dazu.
Selektiere alle notwendigen Felder und die berechnete Summe gruppiert nach DocuId.
Danach einfach LEFT Outer JOIN cte T5 on T3.DocuID = T5.DocuID.
Im Ergebnis dann die DeviceId anzuzeigen macht dann keinen Sinn.
Sonst hast Du wieder eine Doppelung (evtl. Min(DeviceId) !?
Selektiere alle notwendigen Felder und die berechnete Summe gruppiert nach DocuId.
Danach einfach LEFT Outer JOIN cte T5 on T3.DocuID = T5.DocuID.
Im Ergebnis dann die DeviceId anzuzeigen macht dann keinen Sinn.
Sonst hast Du wieder eine Doppelung (evtl. Min(DeviceId) !?