Neu SQL Ausgabe der Varko-Auswahl eines Artikels, mehrsprachig Tabelle zwei mal auf sich Joinen?

John

Sehr aktives Mitglied
3. März 2012
2.640
508
Berlin
Hallo,

ich möchte in einem System, in dem es nur Artikel mit einer Variation gibt eine Tabelle, in der die Artikelnummer, der Name der Variation und der Variationswert steht.

Das funktioniert für Deutsch auch prima mit

Code:
SELECT vStandardArtikel.kArtikel,
         cArtNr,
         vStandardArtikel.kEigenschaftKombi,
         tEigenschaftKombiWert.kEigenschaft,
         tEigenschaftKombiWert.kEigenschaftWert,
         tEigenschaftSprache.cName AS 'VarName DE',
         tEigenschaftWertSprache.cName AS 'VarWert DE'
         FROM vStandardArtikel
         JOIN tArtikelShop ON tArtikelShop.kArtikel = vStandardArtikel.kArtikel
         JOIN tEigenschaftKombiWert on vStandardArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
         JOIN tEigenschaftSprache on tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
         JOIN tEigenschaftWertSprache ON tEigenschaftKombiWert.kEigenschaftWert = tEigenschaftWertSprache.kEigenschaftWert
         WHERE vStandardArtikel.cAktiv = 'Y'
         AND vStandardArtikel.kVaterArtikel <> 0
         AND tEigenschaftSprache.kSprache = 1
         AND tEigenschaftWertSprache.kSprache = 1
         ORDER BY cArtNr ASC

Jetzt hätte ich gerne zwei weitere Spalten, in denen die englischen Belegungen für die Variation und den Variationswert stehen.

Irgendwie muß man tEigenschaftSprache und tEigenschaftWertSprache noch einmal dazu joinen aber mit tEigenschaftSprache.kSprache = 3 und tEigenschaftWertSprache.kSprache = 3.
Leider reicht mein SQL dazu nicht.

Habt Ihr eine Idee?
@mvh ?

Gruß

John
 

Anhänge

  • Varko-Ausgabe.png
    Varko-Ausgabe.png
    30,2 KB · Aufrufe: 5

John

Sehr aktives Mitglied
3. März 2012
2.640
508
Berlin
@JTLSupporter danke, Dein Ansatz ist naheliegend und liefert die gesichten Werte aber als eine weitere Zeile.

Ich benötige keine weitere Zeile sondern die Werte innerhalb der gleichen Zeile als zwei weitere Spalten

Das geht vermutlich eher so in Richtung Abfrage erstellen und das Ergebnis dann nochmal joinen...
 

kelvin.

Gut bekanntes Mitglied
15. Februar 2023
128
45
Frankfurt
Du musst wahrscheinlich die Abfrage noch anpassen. Aber so bekommst du die Artikel in eine Zeile und die Sprache in Spalten
SQL:
WITH Query As (
    SELECT
        vStandardArtikel.kArtikel,
        cArtNr,
        vStandardArtikel.kEigenschaftKombi,
        tEigenschaftKombiWert.kEigenschaft,
        tEigenschaftKombiWert.kEigenschaftWert,
        tEigenschaftSprache.cName AS VarName,
        tEigenschaftWertSprache.cName AS VarWert,
        tEigenschaftSprache.kSprache AS VarNameS,
        tEigenschaftWertSprache.kSprache AS VarWertS
    FROM vStandardArtikel
    JOIN tArtikelShop
        ON tArtikelShop.kArtikel = vStandardArtikel.kArtikel
    JOIN tEigenschaftKombiWert
        ON vStandardArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
    JOIN tEigenschaftSprache
        ON tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
    JOIN tEigenschaftWertSprache
        ON tEigenschaftKombiWert.kEigenschaftWert = tEigenschaftWertSprache.kEigenschaftWert
    WHERE
        vStandardArtikel.cAktiv = 'Y'
        AND vStandardArtikel.kVaterArtikel <> 0
    ),
    Query1 AS (
        SELECT *
        FROM Query
        WHERE
            VarNameS = 1
            AND VarWertS = 1
    ),
    Query2 AS (
        SELECT *
        FROM Query
        WHERE
            VarNameS = 2
            AND VarWertS = 2
    ),
    Query3 AS (
        SELECT *
        FROM Query
        WHERE
            VarNameS = 3
            AND VarWertS = 3
    )
    
SELECT
    *
FROM Query1 AS Q1
FULL OUTER JOIN Query2 AS Q2
    ON Q2.kArtikel = Q1.kArtikel
FULL OUTER JOIN Query3 AS Q3
    ON Q3.kArtikel = Q1.kArtikel
ORDER BY Q1.cArtNr ASC
 
  • Ich liebe es
Reaktionen: John

mvh

Sehr aktives Mitglied
26. Oktober 2011
639
211
Hallo,

ich möchte in einem System, in dem es nur Artikel mit einer Variation gibt eine Tabelle, in der die Artikelnummer, der Name der Variation und der Variationswert steht.

Das funktioniert für Deutsch auch prima mit

Code:
SELECT vStandardArtikel.kArtikel,
         cArtNr,
         vStandardArtikel.kEigenschaftKombi,
         tEigenschaftKombiWert.kEigenschaft,
         tEigenschaftKombiWert.kEigenschaftWert,
         tEigenschaftSprache.cName AS 'VarName DE',
         tEigenschaftWertSprache.cName AS 'VarWert DE'
         FROM vStandardArtikel
         JOIN tArtikelShop ON tArtikelShop.kArtikel = vStandardArtikel.kArtikel
         JOIN tEigenschaftKombiWert on vStandardArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
         JOIN tEigenschaftSprache on tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
         JOIN tEigenschaftWertSprache ON tEigenschaftKombiWert.kEigenschaftWert = tEigenschaftWertSprache.kEigenschaftWert
         WHERE vStandardArtikel.cAktiv = 'Y'
         AND vStandardArtikel.kVaterArtikel <> 0
         AND tEigenschaftSprache.kSprache = 1
         AND tEigenschaftWertSprache.kSprache = 1
         ORDER BY cArtNr ASC

Jetzt hätte ich gerne zwei weitere Spalten, in denen die englischen Belegungen für die Variation und den Variationswert stehen.

Irgendwie muß man tEigenschaftSprache und tEigenschaftWertSprache noch einmal dazu joinen aber mit tEigenschaftSprache.kSprache = 3 und tEigenschaftWertSprache.kSprache = 3.
Leider reicht mein SQL dazu nicht.

Habt Ihr eine Idee?
@mvh ?

Gruß

John
Moin.
Ich kenne 3 Wege (es gibt bestimmt noch mehr), um das Problem zu lösen.
Ich nenne diese: Klassisch, SQL Server und Tricky.
Ich verwende hier SELECT DISTINCT, weil auch in deinem Beispiel die Abfrage je Kombi/KombiWert 2 x Ergebnisse liefern würde.

Klassisch:
SQL:
SELECT DISTINCT vStandardArtikel.kArtikel,
         cArtNr,
         vStandardArtikel.kEigenschaftKombi,
         tEigenschaftKombiWert.kEigenschaft,
         tEigenschaftKombiWert.kEigenschaftWert,
         tEigenschaftSprache.cName AS 'VarName DE',
         tEigenschaftWertSprache.cName AS 'VarWert DE',
         enn.[VarName EN], ens.[VarWert EN]
         FROM vStandardArtikel
         JOIN tArtikelShop ON tArtikelShop.kArtikel = vStandardArtikel.kArtikel
         JOIN tEigenschaftKombiWert on vStandardArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
         JOIN tEigenschaftSprache on tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
         JOIN tEigenschaftWertSprache ON tEigenschaftKombiWert.kEigenschaftWert = tEigenschaftWertSprache.kEigenschaftWert
         LEFT JOIN (
         SELECT ISNULL(ens.cName,'') as 'VarName EN', ens.kEigenschaft FROM tEigenschaftSprache ens WHERE ens.kSprache=2
         ) enn on tEigenschaftKombiWert.kEigenschaft = enn.kEigenschaft
         LEFT JOIN (
         SELECT ISNULL(enw.cName,'') as 'VarWert EN', enw.kEigenschaftWert FROM tEigenschaftWertSprache enw WHERE enw.kSprache=2
         ) ens on tEigenschaftKombiWert.kEigenschaftWert = ens.kEigenschaftWert
         WHERE vStandardArtikel.cAktiv = 'Y'
         AND vStandardArtikel.kVaterArtikel <> 0
         AND tEigenschaftSprache.kSprache = 1
         AND tEigenschaftWertSprache.kSprache = 1
         ORDER BY cArtNr ASC

Hier werden 2 gleiche Tabellen mit einem anderen Namen verwendet.
Es wird oft benutzt und kostet wenig (durch DBMS-Optimierung).

SQL Server:
SQL:
SELECT DISTINCT vStandardArtikel.kArtikel,
         cArtNr,
         vStandardArtikel.kEigenschaftKombi,
         tEigenschaftKombiWert.kEigenschaft,
         tEigenschaftKombiWert.kEigenschaftWert,
         tEigenschaftSprache.cName AS 'VarName DE',
         tEigenschaftWertSprache.cName AS 'VarWert DE',
         enn.[VarName EN], ens.[VarWert EN]
         FROM vStandardArtikel
         JOIN tArtikelShop ON tArtikelShop.kArtikel = vStandardArtikel.kArtikel
         JOIN tEigenschaftKombiWert on vStandardArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
         JOIN tEigenschaftSprache on tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
         JOIN tEigenschaftWertSprache ON tEigenschaftKombiWert.kEigenschaftWert = tEigenschaftWertSprache.kEigenschaftWert
         OUTER APPLY (SELECT ISNULL(ens.cName,'') as 'VarName EN' FROM tEigenschaftSprache ens WHERE ens.kSprache=2 AND ens.kEigenschaft=tEigenschaftKombiWert.kEigenschaft) enn
         OUTER APPLY (SELECT ISNULL(enw.cName,'') as 'VarWert EN' FROM  tEigenschaftWertSprache enw WHERE enw.kSprache=2 AND enw.kEigenschaftWert=tEigenschaftKombiWert.kEigenschaftWert) ens
         WHERE vStandardArtikel.cAktiv = 'Y'
         AND vStandardArtikel.kVaterArtikel <> 0
         AND tEigenschaftSprache.kSprache = 1
         AND tEigenschaftWertSprache.kSprache = 1
         ORDER BY cArtNr ASC

Die OUTER und CROSS APPLY Operatoren sind Tabellen-Wert "Funktionen", die beim ersten Aufruf "kompiliert" werden und als "Inline"-Funktion verwendet werden.
In diesem Beispiel ist es passend: 1 Wert wird zurückgegeben und 2 Argumente/Parameter: Sprache und KombiKey, werden gebraucht.

Tricky:
SQL:
SELECT vStandardArtikel.kArtikel,
         cArtNr,
         vStandardArtikel.kEigenschaftKombi,
         tEigenschaftKombiWert.kEigenschaft,
         tEigenschaftKombiWert.kEigenschaftWert,
         MAX(CASE WHEN tEigenschaftSprache.kSprache=1 THEN tEigenschaftSprache.cName ELSE '' END) AS 'VarName DE',
         MAX(CASE WHEN tEigenschaftWertSprache.kSprache=1 THEN tEigenschaftWertSprache.cName ELSE '' END) AS 'VarWert DE',
         MAX(CASE WHEN tEigenschaftSprache.kSprache=2 THEN tEigenschaftSprache.cName ELSE '' END) AS 'VarName EN',
         MAX(CASE WHEN tEigenschaftWertSprache.kSprache=2 THEN tEigenschaftWertSprache.cName ELSE '' END) AS 'VarWert EN'
         FROM vStandardArtikel
         JOIN tArtikelShop ON tArtikelShop.kArtikel = vStandardArtikel.kArtikel
         JOIN tEigenschaftKombiWert on vStandardArtikel.kEigenschaftKombi = tEigenschaftKombiWert.kEigenschaftKombi
         JOIN tEigenschaftSprache on tEigenschaftKombiWert.kEigenschaft = tEigenschaftSprache.kEigenschaft
         JOIN tEigenschaftWertSprache ON tEigenschaftKombiWert.kEigenschaftWert = tEigenschaftWertSprache.kEigenschaftWert
             WHERE vStandardArtikel.cAktiv = 'Y'
         AND vStandardArtikel.kVaterArtikel <> 0
         AND tEigenschaftSprache.kSprache IN (1,2)
         AND tEigenschaftWertSprache.kSprache IN (1,2)
         GROUP BY vStandardArtikel.kArtikel,
         cArtNr,
         vStandardArtikel.kEigenschaftKombi,
         tEigenschaftKombiWert.kEigenschaft,
         tEigenschaftKombiWert.kEigenschaftWert
         ORDER BY cArtNr ASC
Hier wird BTREE nur einmal durchsucht, die Gruppierung kostet nur etwas mehr als Sortierung.

Ich hoffe, ich konnte deine Frage beantworten.
Viele Grüße, Ihr MVH-Team
 
Zuletzt bearbeitet:
  • Ich liebe es
  • Gefällt mir
Reaktionen: ple und John
Ähnliche Themen
Titel Forum Antworten Datum
Beantwortet #GEFUNDEN# Suche jemand , der uns eine (automatische) SQL Abfrage erstellen kann mit Mail Ausgabe Dienstleistung, Jobs und Ähnliches 2
Neu SQL Abfrage wird mehrfach ausgeführt - Ausgabe in der Übersicht falsch Eigene Übersichten in der JTL-Wawi 8
Neu SQL Ausgabe Bestellinformationen JTL Ameise - Eigene Exporte 4
SQL Abfrage für verkaufte Artikel + aktueller Bestand JTL-Wawi 1.8 1
Neu SQL Script - geänderte Tabellen. User helfen Usern - Fragen zu JTL-Wawi 3
Wie kann ich etwas in der WAWI Datenbank per SQL ändern? JTL-Wawi 1.8 2
Datenbank-Abfrage per SQL nach Lagermenge pro Artikel & Warenbereich (WMSLager) 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 SQL-Abfrage bei Kundenanlage JTL-Wawi 1.7 2
Neu einfache SQL Verknüfpung zweier Tabellen, z.B. Artikel mit ArtikelBeschreibung 1.6.46.1 Gelöste Themen in diesem Bereich 13
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-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 SQL Abfrage Artikelbezeichnung auf Englisch für Artikeletikett User helfen Usern - Fragen zu JTL-Wawi 4
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
SQL Abfrage via Ameise: Seriennummer u. weitere Daten JTL-Wawi 1.8 0
1.8.10.0 - SQL-Job Performance-Optimierung JTL-Wawi 1.8 24
Ausgabe des Warenbestandes mit Fulfillment Lager JTL-Wawi 1.8 0
Gelöst Ausgabe Kundengruppenattribute JTL-Shop 5.3 Allgemeine Fragen zu JTL-Shop 0
Ausgabe Lieferdatum auf Lieferantenbestellung JTL-Wawi 1.8 0
Neu Dot Liquid csv-Ausgabe: Abschneiden / Turncate Gelöste Themen in diesem Bereich 4
Neu Eigene Felder (Kunde) in csv-Datei per Ausgabe (Auftrag oder Lieferschein) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Auftrag und Rechnung Ausgabe funktioniert nicht Client JTL 1.8.10.0 JTL-Wawi 1.8 9
Neu Dynamischen Parameter an BAT anfügen zur Ausgabe als Messagebox User helfen Usern - Fragen zu JTL-Wawi 1
Ausgabe per E-Mail geht plötzlich nicht mehr, Testmail aus Wawi aber schon JTL-Wawi 1.6 22
Keine Erweiterung der Ausgabe trotz 1.8.10 JTL-Wawi 1.8 3
Neu Mehrere Firmen - automatisierte Änderung der Kundennummer? Arbeitsabläufe in JTL-Wawi 6
Neu Der Shop schickt die Aufträge nicht mehr an die Wawi JTL-Shop - Fehler und Bugs 1
Neu Automatische Sortierung der Bilder & Anzahl der Ebay Bilder eBay-Anbindung - Fehler und Bugs 0
Verwendung der Statistik in Wawi 1.8: JTL-Wawi 1.8 2
Neu Kann man in der POS zwischen Mandanten umschalten? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Footer in der Größe anpassen Templates für JTL-Shop 0
Falsche Anzeige der Bestandsführung JTL-Wawi - Fehler und Bugs 5
Neu Drucken-Button auf der Artikeldetailseite Allgemeine Fragen zu JTL-Shop 0
Setup Nummernkreise neue Firma - Länge der Kreise JTL-Wawi 1.8 8
Neu Darstellung/Werte der Variantenauswahl auf Amazon anpassbar? Amazon-Lister - Ideen, Lob und Kritik 0
Neu Kategorienbaum in einer Unterkategorie über der Filterung ausblenden Allgemeine Fragen zu JTL-Shop 1

Ähnliche Themen