SQL Abfrage Hilfe - Gleiche Spalten aber unterschiedlicher Inhalt in der Zeile

  • SQL

    SQL Abfrage Hilfe - Gleiche Spalten aber unterschiedlicher Inhalt in der Zeile

    Hallo,

    ich hab eine etwas komplizierte Anforderung für einen SQL Code.
    Wir stellen gerade unser ERP von Sage 100 auf SAP S4 Hana um.
    Dazu gibt es von SAP bestimmte Templates für bestimmte Bereiche.
    Hier geht es um den Bereich Kunden Preislisten (Konditionssatz für die Preisfindung im SAP genannt)

    Es ist so, das im Blatt 1 des Templates eine fortlaufende Nummer eingetragen wird und zwar für jeden Artikel in der Preisliste, sowie Zusatzinformationen wie Gültigkeit, Betrag Währung usw.
    Das ist kein Problem und bekomme ich so aus der DB:

    SQL-Abfrage

    1. SELECT Concat('PL','-', a.ListeID,'-', Row_Number() OVER(Order BY a.Artikelnummer)) As 'Nummer des Konditionssatz',
    2. 'V' AS 'Anwendung',
    3. 'ZDMH' AS 'Konditionsart',
    4. c.GueltigVon AS 'Gültigkeitsbeginn',
    5. c.GueltigBis AS 'Gültigkeitsende',
    6. '' AS Leerspalte,
    7. ROUND(Einzelpreis,3) AS 'Betrag',
    8. WKz AS 'Konditionseinheit',
    9. b.PreiseinheitVK AS 'Konditionspreiseinheit',
    10. b.Basismengeneinheit AS 'Konditionsmengeneinheit'
    11. FROM KHKPreislistenArtikel a
    12. LEFT JOIN KHKArtikel b on a.Artikelnummer = b.Artikelnummer and a.Mandant = b.Mandant
    13. LEFT JOIN KHKPreislisten c on a.ListeID = c.ID and a.Mandant = c.Mandant
    14. WHERE b.Aktiv = -1
    15. and a.Mandant = 90 and ListeID = 79


    im 2. Tabellenblatt des Templates muss nun zu jedem Eintrag insgesamt 5 Einträge gemacht werden um Informationen des einzelnen Eintrags zu hinterlegen.

    Hier hänge ich leider daran, das ich nicht weis, wie ich SQL sagen kann das er für jeden Eintrag den er findet, 5 Einträge mit den gleichen Spaltenüberschriften, aber mit unterschiedlichen Werten ausgeben soll.

    Der SQL für einen Eintrag sieht so aus:

    SQL-Abfrage

    1. SELECT Concat('PL','-', ListeID,'-', Row_Number() OVER(Order BY a.Artikelnummer )) As 'Nummer des Konditionssatz',
    2. 'MATNR' AS 'Feldname',
    3. a.Artikelnummer AS Feldwert
    4. FROM KHKPreislistenArtikel a
    5. LEFT JOIN KHKArtikel b on a.Artikelnummer = b.Artikelnummer and a.Mandant = b.Mandant
    6. WHERE b.Aktiv = -1
    7. and a.Mandant = 90 and ListeID = 79


    im Grunde ändert sich in Blatt 2 immer nur die MATNR der Rest ist bei allen Einträgen gleich.
    Ich kann natürlich im Excel durch Copy und paste weiter kommen, aber bei 100 Preislisten mit zum Teil 1000 Artikeln dauert das ne Weile und meine Tage sind eh schon lang genug :(

    Hat hier vielleicht jemand ne Idee, wie man dies im SQL einbauen kann?

    in PseudoCode wäre das etwa so:

    Quellcode

    1. For Each Row in (SELECT Concat('PL','-', ListeID,'-', Row_Number() OVER(Order BY a.Artikelnummer )) As 'Nummer des Konditionssatz')
    2. set 'MATNR' AS 'Feldname', a.Artikelnummer AS 'Feldwert'
    3. set 'PLTYP' AS 'Feldname', ListeID AS 'Feldwert'
    4. set 'VKORG' AS 'Feldname', '0092' AS 'Feldwert'
    5. Set 'VTWEG' as 'Feldname', '3D' AS 'Feldwert'
    6. set 'WAERK' AS 'Feldname', Wkz AS 'Feldwert'
    7. NEXT
    8. FROM KHKPreislistenArtikel a
    9. LEFT JOIN KHKArtikel b on a.Artikelnummer = b.Artikelnummer and a.Mandant = b.Mandant
    10. WHERE b.Aktiv = -1
    11. and a.Mandant = 90 and ListeID = 79


    Ich hänge noch ein Beispiel Excel File an damit man sieht wie es aussehen soll.

    Danke Euch
    Dateien
    • Preislisten.xlsx

      (15,81 kB, 60 mal heruntergeladen, zuletzt: )
    "Hier könnte Ihre Werbung stehen..."