[MSSQL] komplizierte Datenbankabfrage

fUnKuCh3n

Erfahrenes Mitglied
Moin liebe Forumgemeinde,

ich habe eine Aufgabe bekommen aus unserer Inventardatenbank eine Auswertung zu fahren die in etwa wie folgt aussehen soll:

Code:
GroupPath | Typ | Anzahl
Gmbh > Klink Zentrum > Station xy | PC | 8
Gmbh > Klink Zentrum > Station xy | Drucker | 2
Gmbh > Klink Zentrum > Station xy | Monitore | 8

Nun habe ich mir bisher folgende Abfrage bauen können die zwar ein wenig erfolgreich ist aber bei weitem noch nicht das bietet was ich brauche:
SQL:
select bms.GroupPath,
m.netname,
a.inventorynumber
from ou_hierarchy ouh
join BMSVW_GroupsWithHierarchyExt bms
on bms.guid_orgunit = ouh.guid_orgunit
join machine m
on m.guid_orgunit = ouh.guid_orgunit
join assets a
on (a.guid_owner = ouh.guid_orgunit or a.guid_owner = m.guid)
where guid_parent_orgunit = '801A18D9-58B3-4AD9-9A54-53809F7BFDD9'
order by GroupPath, inventorynumber

Das Ergebniss ist nun wie folgt:
Code:
GroupPath | netname | inventorynumber
Gmbh > Klink Zentrum > Station xy | PC0001 | DRUCKER1234
Gmbh > Klink Zentrum > Station xy | PC0002 | DRUCKER1234
Gmbh > Klink Zentrum > Station xy | PC0003 | DRUCKER1234

Nun bin ich um ehrlich zu sein ein wenig mit meinem Latein am Ende, denn das Problem ist, das ein Asset entweder einer Orgunit zugeordnet sein kann oder aber einem PC (machine), dafür gibt es im jeweiligen Feld des assets dann die guid_owner welche entweder einer OU zugehörig ist oder einem Asset.

Ich bin sehr gerne bereit weitere Informationen zu liefern falls jemand noch Verständnissfragen hat oder Erläuterungen zu Spalten / Tabellen benötigt.

Danke schonmal vorab!
 
Zuletzt bearbeitet von einem Moderator:
Gut, du willst nun die unterschiedlichen [netname] als PC zählen und die unterschiedlichen [inventorynumber] als Drucker. Aber woher nimmst du die Bildschirme?
 
Ja korrekt, also in der Tabelle Assets befinden sich verschiedenste Arten, z.b. Monitor, Drucker, Scanner, USV und so weiter, also kommen verschiedene Typen / Geräte vor.
 
öhm ja. Und wie erkenne ich den Monitor, den Scanner?

Rein für PC und Drucker seh ich etwa diese lösung
SQL:
SELECT
	GroupPath,
	typ,
	CASE 
		WHEN typ= 'pc'			THEN pc
		WHEN typ= 'drucker'	THEN drucker
	END AS anzahl
FROM
	(SELECT 'pc' AS typ UNION SELECT 'drucker' UNION SELECT 'bildschirm') AS types,
	(
		SELECT
			GroupPath,
			COUNT(DISTINCT netname) AS pc,
			COUNT(DISTINCT inventorynumber) AS drucker
		FROM		
			(
			    -- TODO: Hier dein SQL einsetzen
			) AS md
		GROUP BY
			GroupPath
	) AS mydata;
 
Zuletzt bearbeitet von einem Moderator:
Da würde es 2 Möglichkeiten geben, entweder man gibt das Fest vor wie oben oder aber man geht über die Tabelle "Assettypes" die mit den Assets verknüpft ist, jedes Asset hat eine guid_assettype welche halt eindeutig in der Assettypes ist und in Assettypes.Inventorynumber steht dann z.b. was es genau ist.
 
Ah, du hast da noch Tabellen mit Zuordnungen drin. Dann streiche das Beispiel da oben und löse es über jene Tabelle.
 
Zurück