Registriert seit: 14.09.2015
Version(en): 2010
Guten Tag Bin nicht sicher, ob ich hier am richtigen Ort bin, meine Frage betrifft Excel wie auch Sql. Ich versuche in Excel (2010) externe Daten abzurufen, Ziel ist es die Kosten eines Auftrages aus unserem ERP-System in Excel zu analysieren. Dazu habe ich eine Verbindung angelegt und in den Verbindungseigenschaften im Register Definition eine Sql-Abfrage hinterlegt. Bis hierhin klappt soweit alles, mein Problem ist die Sql-Abfrage als solches. Meine abzufragenden Daten befinden sich in zwei Tabellen, eine beinhaltet die Materialkosten (CSP92020), die andere die Lohnkosten der eigenen Mitarbeiter (CSP93020). In beiden Tabellen ist die Auftragsnummer aufgeführt. Wie muss meine Sql-Abfrage lauten, damit ich alle Datensätze zu einem bestimmten Auftrag (z.B. Auftrag-Nr.: 00015000) erhalte? Habe bis anhin untenstehende Abfrage versucht: SELECT CSP93020.P93AUFNR, CSP93020.P93LOKOI, CSP92020.P92AUFNR, CSP92020.P92MAKOI FROM CS2.CSP92020 CSP92020, CS2.CSP93020 CSP93020 WHERE (CSP93020.P93AUFNR = '00015000') AND (CSP92020.P92AUFNR = '00015000') Als Resultat erhalte ich so aber immer zwei Datensätze pro Materialkostenposition, (siehe nachfolgendes Bild, gelbe Markierung). Ich möchte als Resultat jedoch in einer Zeile den Datensatz der einen Lohnkostenbuchung (551) und in weiteren Zeilen die einzelnen Materialkostenbuchungen (6.37, 3.34, 11.44 usw.) erhalten. [ Bild bitte so als Datei hochladen: Klick mich!] Kann mir jemand weiterhelfen? Besten Dank für Eure Hilfe und guten Rutsch, MiZ
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Miz, im Prinzip fehlt eine Angabe. Du brauchst die "Identitätsspalten"  also die, über die Du die Beziehung zwischen den Tabellen herstellst Also z.B. WHERE CSP93020.P93AUFNR = CSP92020.P92AUFNR AND CSP93020.P93AUFNR = '00015000'
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
Moin Moin, eine echte und auch wesentlich umfangreichere Alternative: Power Query, welches du als Add-In bei MS herunterladen kannst. Keine "Quälerei" mit SQL  , immer wieder verwendbar, arbeitet auch mit SQL, bessere Kontrolle, ...
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 14.09.2015
Version(en): 2010
Besten Dank für die prompte Rückmeldung. Leider lässt sich bei uns im Haus PowerQuery nicht installieren, gemäss unserer IT-Abteilung gibts da scheinbar irgendwelche Konflikte mit anderen Programmen..?!? Von daher muss ich über Sql gehen. Ich habe versucht die Tabellen zu verknüpfen, jedoch entspricht das Resultat weiterhin nicht meinen Vorstellungen: SELECT CSP93020.P93AUFNR, CSP93020.P93LOKOI, CSP92020.P92AUFNR, CSP92020.P92MAKOI FROM CS2.CSP93020 CSP93020 INNER JOIN CS2.CSP92020 CSP92020 ON (CSP93020.P93AUFNR = CSP92020.P92AUFNR) WHERE (CSP92020.P92AUFNR = '00015000') Resultat: [ Bild bitte so als Datei hochladen: Klick mich!] Eigentlich müsste ich zuerst die Tabelle CSP92020 nach dem gewünschten Auftrag abfragen, das Resultat zwischenspeichern. Dann dasselbe für Tabelle CSP93020. Anschliessend die beiden zwischengespeicherten Resultate zusammenfügen. Geht sowas?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
was kommt denn mit meinem Ansatz raus?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 14.09.2015
Version(en): 2010
Hallo, habe nun deinen Ansatz wie folgt eingebaut: SELECT CSP93020.P93AUFNR, CSP93020.P93LOKOI, CSP92020.P92AUFNR, CSP92020.P92MAKOI FROM CS2.CSP92020 CSP92020, CS2.CSP93020 CSP93020 WHERE CSP93020.P93AUFNR = CSP92020.P92AUFNR AND CSP93020.P93AUFNR = '00015000' Resultat: [ Bild bitte so als Datei hochladen: Klick mich!] Es erscheinen nun 4 Zeilen pro Materialposition..?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Jetzt noch das machen was oben drüber steht - gruppieren. GROUP BY ... -> und ein AUFNR - Feld.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 14.09.2015
Version(en): 2010
Guten Morgen Habe nun wie vorgeschlagen noch gruppiert, das Resultat bleibt unverändert..? [ Bild bitte so als Datei hochladen: Klick mich!] Ich denke ich müsste eine Art "Unterabfragen" erstellen (separate Auswertung pro Tabelle), deren Ergebnisse dann zusammenfassen und als finales Resultat ausgeben..? Geht sowas?
Registriert seit: 14.09.2015
Version(en): 2010
Guten Morgen
Habe mir nun mit der nachfolgenden Abfrage beholfen (es sind noch eine weitere Tabelle und einige Tabellenfelder hinzugekommen). Ist vermutlich nicht die Ideallösung für das Problem, aber zumindest stimmt das Resultat:
SELECT (CSP92020.P92AUFNR) Auftragsnummer, (CSP92020.P92INPOS) Auftragsposition, (CSP92020.P92BEZEI) Bezeichnung, (CSP92020.P92MAKOI) Kosten, (CSP92020.P92MAGKI) Gemeinkosten, (CSP92020.P92TMNGI) Menge, (CSP92020.P92PREII) Preis, (CSP92020.P92BUDAT) Buchungsdatum, (CSP92020.P92MANDA) Mandant, (CSP92020.P92TEILN) ID_Nummer, (CSP92020.P92BELEG) Belegnummer, (CSP92020.P92FKMNV) Fakturierte_Menge, (CSP92020.P92FKWEV) Fakturierter_Wert, (CSP92020.P92DATUR) Datenursprung FROM CS2.CSP92020 CSP92020 WHERE (CSP92020.P92AUFNR = '00015000') AND (CSP92020.P92LFDN5 NOT LIKE '00000') UNION SELECT CSP93020.P93AUFNR, CSP93020.P93INPOS, CSP93020.P93BEZEI, CSP93020.P93LOKOI, CSP93020.P93LGKSI, CSP93020.P93ZEITI, CSP93020.P93STDFI, CSP93020.P93BUDAT, CSP93020.P93MANDA, CSP93020.P93PERSN, CSP93020.P93BELEG, CSP93020.P93FKSTV, CSP93020.P93FKWEV, CSP93020.P93DATUR FROM CS2.CSP93020 CSP93020 WHERE (CSP93020.P93AUFNR = '00015000') AND (CSP93020.P93LFDN5 NOT LIKE '00000') UNION SELECT CSP94020.P94AUFNR, CSP94020.P94INPOS, CSP94020.P94BEZEI, CSP94020.P94FLKOI, CSP94020.P94FLGKI, CSP94020.P94ZEITI, CSP94020.P94FMNGI, CSP94020.P94BUDAT, CSP94020.P94MANDA, CSP94020.P94LIEFN, CSP94020.P94BELE6, CSP94020.P94FKMNV, CSP94020.P94FKWEV, CSP94020.P94DATUR FROM CS2.CSP94020 CSP94020 WHERE (CSP94020.P94AUFNR = '00015000') AND (CSP94020.P94LFDN5 NOT LIKE '00000')
Habe nun noch eine weitere Frage, aktuell gebe ich in obiger Abfrage an drei Orten die auszuwertende Auftragsnummer (00015000) an. Lässt sich die Abfrage so anpassen, dass ich nur an einer Stelle die Auftragsnummer angeben muss?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, ich hab mir den Teil der letzten Tage noch mal angeschaut. Hier hätte wohl select distinct ... gereicht und die doppelte Auftragsnummer hätte ich rausgenommen. Also SELECT distinct CSP93020.P93AUFNR, CSP93020.P93LOKOI, CSP92020.P92MAKOI FROM CS2.CSP92020 CSP92020, CS2.CSP93020 CSP93020 WHERE CSP93020.P93AUFNR = CSP92020.P92AUFNR AND CSP93020.P93AUFNR = '00015000' Das mit der UNION muss ich mir erst mal in Ruhe ansehen
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
|