Quantcast
Channel: Für Entwickler: SQL Server Forum
Viewing all articles
Browse latest Browse all 1772

Verschachtelte Abfragen

$
0
0

Hallo liebes Forum :)

Ich hoffe, ich bin im richtigen Unterforum, ansonsten entschuldige ich mich schonmal für die Umstände :)

Ich wurde auf Arbeit gefragt, ob ich nicht ein paar SQL-Abfragen erstellen könnte, die die Arbeit erleichtern würden. Da ich der einzige in der Firma mit SQL-Kenntnissen bin, hab ich natürlich zugestimmt und mir nichts weiter dabei gedacht. Wie schwer können schon ein paar Abfragen sein ;)

Als Randinfo, es handelt es sich um ein Vermessungsbüro und die Abfragen sollen in die Software GeoBüro eingebunden werden. Der Server ist ein Microsoft 2008 R2 Server.

Es gibt Unmengen an Tabellen, in die ich mich erstmal reinfinden musste. Beispielsweise gibt es eine Tabelle für die Aufträge, dann gibt es eine Tabelle für die verschiedenen Vorgänge in diesen Aufträgen und wieder diverse andere Tabellen für Auftragsarten und so weiter. Alles ziemlich weitflächig aufgeteilt und verknüpft.

Das macht dann Abfragen nicht sonderlich leicht, wenn man mehrere Kriterien betrachten muss. Meine SQL-Kenntnisse sind auch etwas eingerostet und ich hatte mich schonmal an Subquerys probiert, aber das funktionierte auch nicht so, wie gedacht.

Ich werf dann einfach mal eine der gewünschten Abfragen in den Raum, vielleicht ist es ja gar nicht so kompliziert und ich stell mich nur blöd an ;)

Die Aufgabenstellung:

"Alle Aufträge, bei denen die Vermessungsunterlagen da sind, aber noch keine Messung im AD (Außendienst) stattgefunden hat
= Endedatum beim Vorgang "Vermessungsunterlagen sind bestellt" (AVU0), aber kein Vorgang "Messung im AD" (ADB)
-> Vorgang "Messung im AD" muss konsequent gesetzt werden"

Aus diesem "Auftrag" hab ich erstmal folgenden Code erstellt:

SELECT		GBAuftrag.Nummer AS Auftragsnummer, GBAuftrag.Objekt, GBAuftrag.Lage, GBAuftragsart.Name AS Auftragsart, GBAuftrag.Betreff, GBVorgangsart.Kurzname, 
		GBVorgangsart.Name AS Vorgangsart, GBVorgang.Ende

FROM		GBAuftrag INNER JOIN
			GBAuftragsart ON GBAuftrag.[#Auftragsart] = GBAuftragsart.ID INNER JOIN
            	GBVorgang ON GBAuftrag.ID = GBVorgang.[#Auftrag] INNER JOIN
            	GBVorgangsart ON GBVorgang.[#Vorgangsart] = GBVorgangsart.ID

WHERE		DATEDIFF(day, GBVorgang.Datum, CURRENT_TIMESTAMP)<=730
			AND GBVorgang.Ende IS NOT NULL 
			AND GBVorgangsart.Kurzname = 'AVU0' 
			AND GBVorgangsart.Kurzname != 'ADB'

ORDER BY	GBAuftrag.Nummer;

Nun ist es aber der Fall, dass die Kurzbezeichnungen für die Vorgänge ja in der gleichen Spalte der Tabelle liegen, also gibt er mir in der derzeitigen Lage nur die Daten aus, die vorhanden sind, aber zeigt mir nicht an, wo noch der Außendienst fehlt. Hier steh ich irgendwie auf dem Schlauch, wie man das kombinieren könnte und wäre über ein paar andere Ansichten oder Lösungsansätze sehr dankbar, denn die folgenden "Wünsche" der Kollegen werden nicht leichter von der Fomulierung :D

Dann danke ich Euch schonmal für eure Zeit und eure Ideen.

LG, Ithron86 :)


Viewing all articles
Browse latest Browse all 1772


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>