Clever-Excel-Forum

Normale Version: Externe Daten abrufen (Sql)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
Hallo Miz,

im Prinzip fehlt eine Angabe. Du brauchst die "Identitätsspalten" Wink also die, über die Du die Beziehung zwischen den Tabellen herstellst
Also z.B. WHERE CSP93020.P93AUFNR = CSP92020.P92AUFNR AND CSP93020.P93AUFNR = '00015000'
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 Blush , immer wieder verwendbar, arbeitet auch mit SQL, bessere Kontrolle, ...
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?
Hallöchen,

was kommt denn mit meinem Ansatz raus?
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..?
Hallöchen,
Jetzt noch das machen was oben drüber steht - gruppieren.
GROUP BY ... -> und ein AUFNR - Feld.
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?
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?
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 Wink
Seiten: 1 2