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 :)