Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

DB2: Zusatztext eines Artikels unterhalb des Artikels darstellen

Dieses Thema im Forum "DB2" wurde erstellt von schwedenole, 6 September 2013.

  1. schwedenole

    schwedenole Neuer Benutzer

    Liebe Fornemitglieder,

    ich habe mal eine Frage, wie man folgendes Problem in SQL lösen kann.

    Es soll eine Zeile mit den Artikelangaben angezeigt werden und dadrunter soll der Zusatztext des Artikels angezeigt werden. Und danach soll dann der nächste Artikel mit Zusatztext angezeigt werden.

    Beispiel:
    2440 Alpecin Shampoo, 200 ml
    Gegen Haarausfall und Schuppen​
    3737 Best Dreikopf Zahnbürste, mittel
    vibrierende Borsten​
    5744 Best Interdent. Nachfüllbürsten, 10er
    Konisch fein 3,0 - 5,5 mm
    Reinigung der Zahnzwischenräume
    Die Informationen stehen in 2 verschiedenen Tabellen. ARTSFS = Artikelangaben, ARTZIS = Zusatztexte.
    Pro Artikel können mehrere Zusatztext-Sätze existieren (evtl. auch gar keine Zusatztexte).

    Habe schon überlegt, ob man so etwas mit einer Stored Procedure lösen kann, bin mir aber nicht sicher, wie.

    Über eure Hilfe wäre ich sehr dankbar.

    Schönen Gruß
    schwedenole
    (Artur)
     
  2. ukulele

    ukulele Datenbank-Guru

    Das geht, läßt sich aber nur bewerkstelligen wenn man beide Tabellen in das selbe Format mit der selben Spaltenanzahl bringt und sozusagen alle Datensätze zu einer verschmilzt. Danach ist es eine Frage der richtigen Sortierung.
    Code:
    SELECT    t.ArtikelNr,
            t.ArtikelText
    FROM    (    SELECT    1 AS Untersortierung,
                        a.ArtikelNr,
                        a.ArtikelBezeichnung AS ArtikelText
                FROM    ARTSFS a
                UNION ALL
                SELECT    2 AS Untersortierung,
                        z.ArtikelNr,
                        z.Zusatztexte AS ArtikelText
                FROM    ARTZIS z
            ) t
    ORDER BY t.ArtikelNr,t.Untersortierung
     
  3. schwedenole

    schwedenole Neuer Benutzer

    Hallo ukulele,

    ich habe dein Beispiel eben ausprobiert. Ein Problem bleibt aber noch: wenn der Zusatztext angezeigt werden soll, soll die Artikelnr. nicht mehr mit aufgeführt werden. Momentan zeigt er neben dem Zusatztext auch die Artikelnr, zu dem der Zusatztext gehört. Könnte man das auch noch wegbekommen?

    Danke für deine Hilfe.

    Gruß
    schwedenole
    (Artur)
     
  4. ukulele

    ukulele Datenbank-Guru

    Ja solange die Spalte erhalten bleibt. Man müsste dann mit einer CASE Schleife grade die Einträge Filtern die man nicht sehen will und durch NULL oder 0 ersetzen. Theoretisch kann man die Spalte auch in Text formatieren, das würde ich aber ungern tun.
    Code:
    SELECT    (    CASE   
                WHEN    t.Untersortierung = 1
                THEN    t.ArtikelNr
                ELSE    NULL
                END ) AS ArtikelNr,
            t.ArtikelText
    FROM    (    SELECT    1 AS Untersortierung,
                        a.ArtikelNr,
                        a.ArtikelBezeichnung AS ArtikelText
                FROM    ARTSFS a
                UNION ALL
                SELECT    2 AS Untersortierung,
                        z.ArtikelNr,
                        z.Zusatztexte AS ArtikelText
                FROM    ARTZIS z
            ) t
    ORDER BY t.ArtikelNr,t.Untersortierung
     
  5. schwedenole

    schwedenole Neuer Benutzer

    Hallo Ukulele,

    dein SQL-Code funkioniert - aber nur für eine Sortierung nach Artikelnummer. Gibt es einen Trick, dass die Hauptsortierung nach der Artikelbezeichnung erfolgt? Trotzdem sollen die Zusatztexte zu jedem Artikel unterhalb des Artikels stehen (aber nicht zur Sortierung beitragen).

    Hier kommt meine Version des Befehls: ich musste noch ein paar Filter einbauen, da nur die Artikel genommen werden sollen, die auch ein Preislistenkennzeichen "J" haben. Somit musste die gleiche Eingrenzung auch bei den Zusatztexten erfolgen.

    Code:
    SELECT
        CASE 
        WHEN t.Untersortierung = 1 THEN t.aartnr
        ELSE NULL
        END AS ArtikelNr,
        t.ArtikelText
    
    FROM    (SELECT 1 AS Untersortierung,
                    af.aartnr,
                    af.abez AS ArtikelText
        FROM ARTSFS as af
        where asa = 'A'    --nur aktive Artikel
        and aprlkz = 'J'    --nur Artikel mit Preislistenkennzeichen
        and aartnr >= 100    --keine Pseudo-Artikel
    
        UNION ALL
    
        SELECT    2 AS Untersortierung,
                      az.aartnr,
                      az.azitxt AS ArtikelText
        FROM ARTZIS as az
        where azitxs = 'J'  --nur Zusatztext für Preisliste
        and az.aartnr in (select af2.aartnr
                  from artsfs as af2
                  where asa = 'A'    --nur aktive Artikel
                  and aprlkz = 'J'    --nur Artikel mit Preislistenkennzeichen
                  and aartnr >= 100)    --keine Pseudo-Artikel
    
            ) as t
    
    ORDER BY t.aartnr,
        t.Untersortierung
    
    Sorry, dass meine Wünsche so kleckerhaft kommen. Ich hoffe, dass ich danach nicht mehr nerven muss.

    Gruß
    schwedenole
    (Artur)
     
  6. ukulele

    ukulele Datenbank-Guru

    Ich hab deinem Code 2 Zeilen hinzugefügt (mit --neu gekennzeichnet). Diese führen dazu das eine zusätzliche Spalte aus t ausgegeben werden. Diese zeige ich zwar nicht an (genauso wie t.Untersortierung) verwende sie aber in ORDER BY.
    Code:
    SELECT    (    CASE
                WHEN t.Untersortierung = 1
                THEN t.aartnr
                ELSE NULL
                END ) AS ArtikelNr,
            t.ArtikelText
    FROM    (    SELECT    1 AS Untersortierung,
                        af.aartnr,
                        af.abez AS ArtikelBez, --neu
                        af.abez AS ArtikelText
                FROM    ARTSFS AS af
                WHERE    asa = 'A' --nur aktive Artikel
                AND        aprlkz = 'J' --nur Artikel mit Preislistenkennzeichen
                AND        aartnr >= 100 --keine Pseudo-Artikel
                UNION ALL
                SELECT    2 AS Untersortierung,
                        az.aartnr,
                        az.abez AS ArtikelBez, --neu
                        az.azitxt AS ArtikelText
                FROM    ARTZIS AS az
                WHERE    azitxs = 'J' --nur Zusatztext für Preisliste
                AND        az.aartnr IN (    SELECT    af2.aartnr
                                        FROM    artsfs AS af2
                                        WHERE    asa = 'A' --nur aktive Artikel
                                        AND        aprlkz = 'J' --nur Artikel mit Preislistenkennzeichen
                                        AND        aartnr >= 100 ) --keine Pseudo-Artikel
            ) AS t
    ORDER BY t.ArtikelBez,t.aartnr,t.Untersortierung
     
  7. schwedenole

    schwedenole Neuer Benutzer

    Ja, das funktioniert! Jetzt bin ich wunschlos glücklich.

    Danke sagt
    schwedenole
    (Artur)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden