Neu SQL Abfrage aus mehreren Tabellen

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Hallo Zusammen,

ich habe aktuell einen Denkfehler / Verständnisfehler und hoffe das mir von euch jemand weiterhelfen kann.

Folgende Abfrage generiert für jede Position der Bestellung eine neue Zeile. Ich wollte aber nur eine Zeile pro Rechnung.

Wo habe ich den Gedankenfehler?

Code:
SELECT trechnung.dErstellt, trechnung.cRechnungsNr, tZahlung.cExternalTransactionId, tBestellung.cInetBestellNr, tAdresse.cName, tZahlung.cName  FROM trechnung

INNER JOIN tBestellung ON trechnung.tBestellung_kBestellung = tBestellung.kBestellung

INNER JOIN tZahlung ON tZahlung.kBestellung = tBestellung.kBestellung

INNER JOIN tAdresse ON tAdresse.kKunde = tBestellung.tKunde_kKunde

WHERE trechnung.dErstellt BETWEEN  CONVERT(DATETIME,'01.11.2019', 104) AND CONVERT(DATETIME,'30.12.2019', 104)

Grüße
Marcus
 

sjk

Sehr aktives Mitglied
16. Januar 2019
364
130
Moin Marcus,

läuft das SQL in einem Berichtscontainer einer L&L Vorlage oder an einem anderen Ort?
 

waagenwelt

Sehr aktives Mitglied
30. September 2012
452
127
Toppenstedt
Hallo Marcus,

nein, tut sie nicht. ;)

Wenn ein Kunde mehrere Adressen hat, so erzeugt die Abfrage entsprechend viele Zeilen je Rechnung.
Das gleiche gilt für Zahlungen pro Rechnung und multipliziert sich sogar.

Ich würde auf tBestellung.kRechnungsadresse statt auf tBestellung.tKunde_kKunde joinen und eine Summe über die Zahlungen bilden.

Viele Grüße

Stefan
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Hallo.

vielen Dank für die schnellen Rückmeldungen.

@sjk
Die Abfrage ist ein normales query im SQL Manager. Ich teste da nur, ob meine Abfrage das gewünschte Ergebnis bringt. (tut es ja nicht :) )

@waagenwelt
Auf die Rechnungsadresse zu verbinden ist ein gute Idee, die gibt es dann ja nur einmal.
Zahlungen gibt es meistens nur eine pro Rechnung. (Berücksichtigen müsste ich das aber auch noch)

Eventuell ist es doch einfacher, die Abfragen zu trennen.

Das Ganze läuft später in einer C# Anwendung. (verstehe ich wesentlich besser als SQL :D)

Grüße
Marcus
 

Thomas_T

Sehr aktives Mitglied
19. Dezember 2019
250
58
Werdau
Der "Denkfehler" ist der, dass der Query alle Positionen ausgibt, so wie du es auch "verlangt" hast.

Was noch fehlt ist die Zusammenfassung nach Rechnung, also ein "

SQL:
GROUP BY trechnung.cRechnungsNr
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
@somobil

Vielen Dank für deine Antwort. Wie du richtig erkannt hast, handelt es sich ehr um Verständnisprobleme als um Denkfehler ;)
Leider sind Computer dumm und tun genau das was man ihnen sagt :D

Das Einfügen der GROUP Funktion führt nun zu einer Fehlermeldung die ich mit meinem aktuellen Wissensstand nicht beheben kann.

Meldung 8120, Ebene 16, Status 1, Zeile 1
Die trechnung.dErstellt-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

Behebung:
Fehler der Ebene 16 sind Fehler, die vom Anwender hervorgerufen werden. Sie können und müssen vom Anwender korrigiert werden. Das Statement kann so nicht ausgeführt werden. Die Spalte muss entweder in einer Aggregatfunktion enthalten sein oder in der GROUP BY Klausel.

Hast du einen Buch-Tipp für mich, damit ich mich mit dem Thema SQL Server näher beschäftigen kann?

SQL:
SELECT trechnung.dErstellt, trechnung.cRechnungsNr, tZahlung.cExternalTransactionId, tBestellung.cInetBestellNr, tAdresse.cName, tZahlung.cName  FROM trechnung

INNER JOIN tBestellung ON trechnung.tBestellung_kBestellung = tBestellung.kBestellung

INNER JOIN tZahlung ON tZahlung.kBestellung = tBestellung.kBestellung

INNER JOIN tAdresse ON tAdresse.kKunde = tBestellung.tKunde_kKunde

WHERE trechnung.dErstellt BETWEEN  CONVERT(DATETIME,'01.11.2019', 104) AND CONVERT(DATETIME,'30.12.2019', 104)

GROUP BY trechnung.cRechnungsNr

Hier die vermutlich sinnbefreite Umgehung des Problems
SQL:
SELECT MIN(trechnung.dErstellt) AS "Datum", 
         trechnung.cRechnungsNr AS "Rechnungsnummer", 
         MIN(tZahlung.cExternalTransactionId) AS "Externe Transaktions ID", 
         MIN(tBestellung.cInetBestellNr) AS "Externe Bestellnummer", 
         MIN(tAdresse.cName) AS "Nachname", 
         MIN(tZahlung.cName) AS "Zahlungsname"  
         
FROM trechnung

INNER JOIN tBestellung ON trechnung.tBestellung_kBestellung = tBestellung.kBestellung

INNER JOIN tZahlung ON tZahlung.kBestellung = tBestellung.kBestellung

INNER JOIN tAdresse ON tAdresse.kKunde = tBestellung.tKunde_kKunde

WHERE trechnung.dErstellt BETWEEN  CONVERT(DATETIME,'01.11.2019', 104) AND CONVERT(DATETIME,'30.12.2019', 104)

GROUP BY trechnung.cRechnungsNr

Grüße
Marcus
 
Zuletzt bearbeitet:

Eiko

Aktives Mitglied
26. Juni 2017
56
2
@somobil

Vielen Dank für deine Antwort. Wie du richtig erkannt hast, handelt es sich ehr um Verständnisprobleme als um Denkfehler ;)
Leider sind Computer dumm und tun genau das was man ihnen sagt :D

Das Einfügen der GROUP Funktion führt nun zu einer Fehlermeldung die ich mit meinem aktuellen Wissensstand nicht beheben kann.


Grüße
Marcus

MMn, wenn du GROUP BY einfügst, musst du alle ausgewählten Spalten gruppieren.
Also:

SQL:
GROUP BY trechnung.cRechnungsNr, trechnung.dErstellt, tZahlung.cExternalTransactionId, tBestellung.cInetBestellNr, tAdresse.cName, tZahlung.cName
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Hallo @Eiko,

vielen Dank für deine Antwort. Mit den o.g. MIN Funktionen hat es zwar auch geklappt, aber dein Hinweis gefällt mir wesentlich besser :)

Vielen Dank dafür.

Grüße
Marcus
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Leider habe ich noch mal eine Frage. Und zwar wird der VKPreis mehrmals summiert. Scheint immer doppelt zu sein.

Was mache ich falsch?

SQL:
SELECT FORMAT(MIN(trechnung.dErstellt),'dd.MM.yyyy') AS "Datum",trechnung.cRechnungsNr AS "Rechnungsnummer",
                FORMAT(SUM(tbestellpos.fVKPreis),'#,0.00') AS "Preis",
                MIN(tZahlung.cExternalTransactionId) AS "Externe Transaktions ID", MIN(tBestellung.cInetBestellNr) AS "Externe Bestellnummer",
                CONCAT(CONCAT(MIN(tAdresse.cVorname), ' '), MIN(tAdresse.cName)) AS "Name",
                MIN(tZahlung.cName) AS "Zahlungsname"  FROM trechnung INNER JOIN tBestellung ON trechnung.tBestellung_kBestellung = tBestellung.kBestellung
                INNER JOIN tZahlung ON tZahlung.kBestellung = tBestellung.kBestellung INNER JOIN tAdresse ON tAdresse.kKunde = tBestellung.tKunde_kKunde
                INNER JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tRechnung.tBestellung_kBestellung
                WHERE trechnung.dErstellt BETWEEN  CONVERT(DATETIME,'01.02.2020', 104) AND CONVERT(DATETIME,'02.02.2020', 104) GROUP BY trechnung.cRechnungsNr
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Für die Nachwelt. Das Problem war, wie @waagenwelt schon geschrieben hatte, die Adresse. Ich hatte immer noch die Kundennummer statt der Rechnungsadresse im join. Dadruch wurde es multipliziert. (Wer Empfehlungen umsetzen kann, ist klar im Vorteil :D) Danke noch mal!

SQL:
SELECT FORMAT(MIN(trechnung.dErstellt),'dd.MM.yyyy') AS "Datum",MIN(trechnung.cRechnungsNr) AS "Rechnungsnummer",
                FORMAT(SUM(tbestellpos.fVKPreis*tBestellpos.nAnzahl),'#,0.00')  AS "Preis",
                MIN(tZahlung.cExternalTransactionId) AS "Externe Transaktions ID",
                MIN(tBestellung.kBestellung) AS "Externe Bestellnummer",
                CONCAT(CONCAT(MIN(tAdresse.cVorname), ' '), MIN(tAdresse.cName)) AS "Name",
                MIN(tZahlung.cName) AS "Zahlungsname"  FROM trechnung
                INNER JOIN tBestellung ON trechnung.tBestellung_kBestellung = tBestellung.kBestellung
                INNER JOIN tZahlung ON tZahlung.kBestellung =  tBestellung.kBestellung
                INNER JOIN tAdresse ON tBestellung.kRechnungsAdresse = tAdresse.kAdresse
                INNER JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
                WHERE trechnung.dErstellt BETWEEN  CONVERT(DATETIME,'01.02.2020', 104) AND CONVERT(DATETIME,'02.02.2020', 104)
                GROUP BY trechnung.cRechnungsNr

Doppler habe ich jetzt immer noch drin. Dieses Problem sollte ich aber auch noch lösen können ... hoffe ich :)

EDIT: kRechnungsAdresse hat eine komplett andere nummer als KKunde.Adresse

Edit2:
INNER JOIN tAdresse ON tAdresse.kAdresse = tBestellung.tAdresse_kAdresse geht auch nicht, da dann die Amazon Bestellungen nicht gefunden werden.

Mir erschließen sich die Adressen gerade nicht ...

Edit3:
trechnungsadresse ist eine ganz andere Tabelle, deshalb konnte ich tBestellung.kRechnungsAdresse nicht mit den Adressen joinen. Mit trechnungsadresse klapp es jetzt aber wunderbar.
 
Zuletzt bearbeitet:

zwitsch

Sehr aktives Mitglied
14. November 2007
404
36
Schau mal bei den Views nach. Dort gibt es die Kunde.vRechnungen (oder so ähnlich, Wawi steht gerade nicht zur Verfügung). Dort findest Du vielleicht die Informationen, die Du benötigst, ganz ohne Join.
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Hey @zwitsch,

das ist ja Klasse :). Da kann ich mir diesen Riesen-Hack ja sparen. In die Views habe ich noch nie geguckt. (Hätte ich tun sollen^^)
Da ist alles drin was ich brauche. (und noch mehr)

Das joinen funktioniert jetzt zwar, aber das View sollte noch etwas zügiger sein.

vielen Dank!

Grüße
Marcus
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
So einfach kann die Welt sein :D

SQL:
SELECT FORMAT(Kunde.lvRechnungen.dErstellt,'dd.MM.yyyy') AS "Datum",
                Kunde.lvRechnungen.cRechnungsnummer AS "Rechnungsnummer",
                Kunde.lvRechnungen.fRechnungswert  AS "Umsatz",
                Kunde.lvRechnungen.cShopbestellnummer AS "Externe Transaktions ID",
                CONCAT(CONCAT(Kunde.lvRechnungen.cRechnungsadresseVorname, ' '), Kunde.lvRechnungen.cRechnungsadresseNachname) AS "Name",
                (Kunde.lvRechnungen.cZahlungsartname) AS "Zahlungsname" 
                
FROM Kunde.lvRechnungen

WHERE (dErstellt BETWEEN  CONVERT(DATETIME,'01.02.2020', 104) AND CONVERT(DATETIME,'29.02.2020', 104))
 

marfitec

Sehr aktives Mitglied
10. März 2018
199
36
Für Historische Daten scheint das nicht ganz zu funktionieren. Da sind z.B. cShopbestellnummer von ebay leer. Aber ansonsten TOP!
 
Ähnliche Themen
Titel Forum Antworten Datum
Datenbank-Abfrage per SQL nach Lagermenge pro Artikel & Warenbereich (WMSLager) JTL-Wawi 1.8 1
Beantwortet #GEFUNDEN# Suche jemand , der uns eine (automatische) SQL Abfrage erstellen kann mit Mail Ausgabe Dienstleistung, Jobs und Ähnliches 2
Neu SQL-Abfrage bei Kundenanlage JTL-Wawi 1.7 2
Neu CSV-Datei direkt in einer SQL-Abfrage verwenden User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Abfrage in Excel User helfen Usern - Fragen zu JTL-Wawi 12
Neu SQL Abfrage Artikelbezeichnung auf Englisch für Artikeletikett User helfen Usern - Fragen zu JTL-Wawi 4
Neu SQL Abfrage wird mehrfach ausgeführt - Ausgabe in der Übersicht falsch Eigene Übersichten in der JTL-Wawi 8
SQL Abfrage via Ameise: Seriennummer u. weitere Daten JTL-Wawi 1.8 0
Neu SQL Abfrage über ODBC für Bewegunghistorie (WMS) Eigene Übersichten in der JTL-Wawi 4
Komplexe SQL Abfrage zu gelieferten Artikeln mit eigenen Feldern - Hilfe gesucht JTL-Wawi 1.8 1
SQL Abfrage alle Aufträge ohne Lieferschein JTL-Wawi 1.8 2
Neu Logfile: SQL Fehler, aber warum? JTL-Shop - Fehler und Bugs 2
Neu Erstinstallation JTL WaWi 1.8.12 - heruntergeladen wird SQL Express 2017 _statt_ der empfohlenen 2022 Version Installation von JTL-Wawi 8
Neu MS SQL Server 2022 oder MS SQL Server 2022 Express? Installation von JTL-Wawi 8
Neu SQL-Fehler bei Volltextsuche und Sonderzeichen JTL-Shop - Fehler und Bugs 0
Neu einfache SQL Verknüfpung zweier Tabellen, z.B. Artikel mit ArtikelBeschreibung 1.6.46.1 Gelöste Themen in diesem Bereich 13
Neu SQL Ausgabe der Varko-Auswahl eines Artikels, mehrsprachig Tabelle zwei mal auf sich Joinen? User helfen Usern - Fragen zu JTL-Wawi 5
Neu SQL-Erfahrene vor - Nach Datenrettung - fehlende Aufträge lassen sich nicht einfügen - Ideen? User helfen Usern 4
Neu Nach Installation eines neuen SQL Servers klappt die Verbindung vom Benutzer-PC zum Server-PC nicht mehr. Installation von JTL-Wawi 5
Neu Fehler SQL-Schema importieren bei Neuinstallation Installation / Updates von JTL-Shop 7
Neu Update MS SQL 2014 auf MS SQL 2022 User helfen Usern - Fragen zu JTL-Wawi 0
Neu Datenbankebene per SQL löschen Eigene Übersichten in der JTL-Wawi 6
Neu MS SQL 14 Express wird langsam voll. Welche Lienzen benötigen wir? Bitte um Hilfe Eigene Übersichten in der JTL-Wawi 27
Upgrade von SQL Server 2014 auf höhere Version JTL-Wawi 1.8 4
1.8.11.0 - Worker SQL lässt System hängen JTL-Wawi 1.8 0
Neu List&Label Merkmale auf Etiketten (SQL) Gelöste Themen in diesem Bereich 3
Neu SQL Server Express 2017 auf 2022 Update Installation von JTL-Wawi 10
Neu Nach SQL Server neuinstallation Benutzer gelöscht? JTL-Wawi - Fehler und Bugs 3
Neu Versandart + Zahlungsart in Rechnungskorrektur (SQL) User helfen Usern - Fragen zu JTL-Wawi 10
1.8.10.0 - SQL-Job Performance-Optimierung JTL-Wawi 1.8 24
Neu SQL 2017 auf 2022 updaten (express) User helfen Usern - Fragen zu JTL-Wawi 1
SQL ifGetPrice liefert nur netto Preise, wie komme ich an Brutto ran? JTL-Wawi 1.7 4
Neu Abfrage von Änderungen am Lagerbestand zu einem bestimmten Zeitpunkt in der Vergangenheit JTL Ameise - Eigene Exporte 3
Neu Abfrage der Versandart von der Plattform User helfen Usern - Fragen zu JTL-Wawi 0
Neu gelöst: PHP Abfrage Versandklasse und passendes Bild aussteuern Betrieb / Pflege von JTL-Shop 2
Neu Gefahrlos Testkunden aus tkunde löschen? Umstieg auf JTL-Shop 0
Neu Kurzbeschreibung aus mehreren Zellen importieren - möglich? User helfen Usern - Fragen zu JTL-Wawi 2
Neu Daten aus getBackorderString Templates für JTL-Shop 7
Neu Nach Update auf 5.3 fliegen die Produkte aus dem Merchant Center JTL-Shop - Fehler und Bugs 0
Neu Update des JTL shops aus der Wawi funktioniert nicht Allgemeine Fragen zu JTL-Shop 1
Neu EK-Netto der Verkäufe aus Datenbank ? User helfen Usern - Fragen zu JTL-Wawi 5
Kundenattribute aus Shop übernehmen und aus Wawi zurück an Shop übermitteln Einrichtung JTL-Shop5 1
Neu Produktdaten aus Shop zur Wawi WooCommerce-Connector 9
Neu Kunden aus Wawi nicht auffindbar JTL-POS - Fehler und Bugs 4
Versuch Bilder aus Ebay für Kaufland zu übernehmen JTL-Wawi 1.8 0
Druckvorlage für Etiketten aus Auftragspositionen JTL-Wawi 1.8 4
Neu Shop in Unterverzeichnis führt dazu, dass Inhalte aus dem übergeordneten Verzeichnis im Shop gezeigt werden JTL-Shop - Fehler und Bugs 3
Rechnung zeigt Mehrwertsteuer 0% aus obwohl 7% berechnet werden - wenn UST-ID eingegeben JTL-Wawi 1.8 0
Warum sind die Rechnungen aus Aufträge(mit Rechnung(Vollständig)) nicht unter Rechnung zu finden JTL-Wawi 1.7 0
Neu Alle Produktbilder in Shopify aus JTL löschen Shopify-Connector 0

Ähnliche Themen