DB2: Zusatztext eines Artikels unterhalb des Artikels darstellen

schwedenole

Neuer Benutzer
Beiträge
4
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)
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.409
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
 

schwedenole

Neuer Benutzer
Beiträge
4
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)
 

ukulele

Datenbank-Guru
Beiträge
4.409
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
 

schwedenole

Neuer Benutzer
Beiträge
4
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)
 

ukulele

Datenbank-Guru
Beiträge
4.409
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
 
Werbung:
Oben