andy1987
Goto Top

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 face-smile

Content-ID: 285345

Url: https://administrator.de/contentid/285345

Ausgedruckt am: 16.11.2024 um 07:11 Uhr

StefanLausL
StefanLausL 12.10.2015 aktualisiert um 15:21:55 Uhr
Goto Top
Hallo,

ich würde mit CTE arbeiten


WITH vRam AS (SELECT DeviceId,SUM(capacity ) capacity FROM tRam GROUP BY DeviceId)


Dann Select wie oben und statt LEFT Outer JOIN tRAM T6 on T6.DeviceID = t5.DeviceID
einfach LEFT Outer JOIN vRAM T6 on T6.DeviceID = t5.DeviceID
Andy1987
Andy1987 12.10.2015 um 15:29:50 Uhr
Goto Top
Hi,

das Group By auf die DeviceID geht leider nicht, da jeder RAM-Riegel eine DeviceId hat.

Über die Tabelle tDevices findet die Verknüpfung zur DocuId statt (DocuID gleich Rechner).
StefanLausL
StefanLausL 12.10.2015 um 15:47:06 Uhr
Goto Top
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) !?
Andy1987
Andy1987 13.10.2015 um 13:09:53 Uhr
Goto Top
Danke... Hat funktioniert face-smile