Neu Eigene Felder / Attribute spaltenweise exportieren

Felix-lg

Aktives Mitglied
22. November 2022
76
19
Hallo Zusammen,
ich versuche eine SQL Abfrage zu erstellen mit der ich am Ende bestimmte Eigene Felder in Form von Spalten ausgeben kann (als Bestandteil eines eigenen Exports mit weiteren Spalten).
Komme damit aber leider gar nicht weiter.

Folgende SQL gibt alle Attribute als Spalten aus (so wie auch der übliche Export):

SQL:
SELECT
cArtNr AS 'Artikelnummer',
vStdA.cName AS 'Artikelname',

tAttributSprache.cName AS 'Name',
CASE
    WHEN tFeldTyp.nDatenTyp = 0 THEN CONVERT(VARCHAR, tArtikelAttributSprache.nWertInt)
    WHEN tFeldTyp.nDatenTyp = 1 THEN CONVERT(VARCHAR, tArtikelAttributSprache.fWertDecimal)
    WHEN tFeldTyp.nDatenTyp = 2 THEN tArtikelAttributSprache.cWertVarchar
    WHEN tFeldTyp.nDatenTyp = 3 THEN CONVERT(VARCHAR, tArtikelAttributSprache.dWertDateTime, 104)
END AS 'Wert'

FROM vStandardArtikel vStdA
JOIN tArtikelAttribut on tArtikelAttribut.kArtikel = vStdA.kArtikel
JOIN tAttributSprache on tAttributSprache.kAttribut = tArtikelAttribut.kAttribut
JOIN tArtikelAttributSprache ON tArtikelAttribut.kArtikelAttribut= tArtikelAttributSprache.kArtikelAttribut
JOIN tAttribut ON tAttribut.kAttribut = tArtikelAttribut.kAttribut
JOIN tFeldTyp ON tFeldTyp.kFeldTyp = tAttribut.kFeldTyp

WHERE tArtikelAttributSprache.kSprache = 0
AND cArtNr LIKE 'PT%'

Folgende SQL gibt nur ein bestimmtes Attribut aus (siehe: https://forum.jtl-software.de/threads/sql-fuer-export-eines-eigenen-feldes.211059/):

SQL:
DECLARE @EigenesFeldName VarChar(128)

-- ###### Hier den Namen des Eigenen Feldes Eintragen ######
SET @EigenesFeldName = 'Dein Feld Name'
-- #########################################################

SELECT
cArtNr AS 'Artikelnummer',
vStdA.cName AS 'Artikelname',
@EigenesFeldName AS 'Name',
CASE
    WHEN tFeldTyp.nDatenTyp = 0 THEN CONVERT(VARCHAR, tArtikelAttributSprache.nWertInt)
    WHEN tFeldTyp.nDatenTyp = 1 THEN CONVERT(VARCHAR, tArtikelAttributSprache.fWertDecimal)
    WHEN tFeldTyp.nDatenTyp = 2 THEN tArtikelAttributSprache.cWertVarchar
    WHEN tFeldTyp.nDatenTyp = 3 THEN CONVERT(VARCHAR, tArtikelAttributSprache.dWertDateTime, 104)
END AS 'Wert',
tFeldTyp.cName AS 'Datentyp (sonst autom. ermitteln)'
FROM vStandardArtikel vStdA
JOIN tArtikelAttribut on tArtikelAttribut.kArtikel = vStdA.kArtikel
JOIN tArtikelAttributSprache ON tArtikelAttribut.kArtikelAttribut= tArtikelAttributSprache.kArtikelAttribut
JOIN tAttribut ON tAttribut.kAttribut = tArtikelAttribut.kAttribut
JOIN tFeldTyp ON tFeldTyp.kFeldTyp = tAttribut.kFeldTyp
WHERE tArtikelAttributSprache.kSprache = 0
AND tArtikelAttribut.kAttribut=(SELECT TOP(1) kAttribut FROM tAttributSprache WHERE kSprache = 0 AND cName = @EigenesFeldName)


Was ich nun möchte ist im Grunde, eine Asuwahl von mehreren Eigenen Felder in mehreren Spalten.
Ich habe es schon ein wenig mit dem PIVOT Befehl versucht, habe aber keine Ahnung wie es gehen könnte. Dafür sind meine SQL Kenntnisse einfach viel zu gering...

Wenn jemand helfen kann oder Hinweise hat, wäre ich dankbar.

Gruß
Felix
 

frankell

Sehr aktives Mitglied
9. September 2019
2.559
780
Flensburg
Deinen Code habe ich so belassen und als CTE gesetzt:

SQL:
DECLARE @EigenesFeldName1 NVARCHAR(16) = (SELECT 'EigenesFeldName1');
DECLARE @EigenesFeldName2 NVARCHAR(22) = (SELECT 'EigenesFeldName2');
DECLARE @EigenesFeldName3 NVARCHAR(12) = (SELECT 'EigenesFeldName3');

-- CTE erstellen
WITH CTE (Artikelnummer, Artikelname, Attributname, Attributwert, Attributdatentyp) AS (
SELECT
    vStdA.cArtNr AS [Artikelnummer],
    vStdA.cName AS [Artikelname],
    tAttributSprache.cName AS [Attributname],
    CASE
        WHEN tFeldTyp.nDatenTyp = 0 THEN CONVERT(nvarchar, tArtikelAttributSprache.nWertInt)
        WHEN tFeldTyp.nDatenTyp = 1 THEN CONVERT(nvarchar, tArtikelAttributSprache.fWertDecimal)
        WHEN tFeldTyp.nDatenTyp = 2 THEN tArtikelAttributSprache.cWertVarchar
        WHEN tFeldTyp.nDatenTyp = 3 THEN CONVERT(nvarchar, tArtikelAttributSprache.dWertDateTime, 104)
    END AS [Attributwert],
    tFeldTyp.cName AS [Attributdatentyp]
FROM vStandardArtikel AS vStdA
JOIN tArtikelAttribut ON tArtikelAttribut.kArtikel = vStdA.kArtikel
JOIN tAttributSprache ON tAttributSprache.kAttribut = tArtikelAttribut.kAttribut
JOIN tArtikelAttributSprache ON tArtikelAttribut.kArtikelAttribut = tArtikelAttributSprache.kArtikelAttribut
JOIN tAttribut ON tAttribut.kAttribut = tArtikelAttribut.kAttribut
JOIN tFeldTyp ON tFeldTyp.kFeldTyp = tAttribut.kFeldTyp
WHERE tArtikelAttributSprache.kSprache = 0
AND vStdA.cArtNr LIKE 'PT%'
)
-- Abfrage aus der CTE über View
SELECT
    vStdA.cArtNr,
    @EigenesFeldName1 AS [Attributname1],
    (SELECT CTE.[Attributwert] FROM CTE WHERE CTE.[Artikelnummer] = vStdA.cArtNr AND CTE.[Attributname] = @EigenesFeldName1) AS [Wert1],
    (SELECT CTE.[Attributdatentyp] FROM CTE WHERE CTE.[Artikelnummer] = vStdA.cArtNr AND CTE.[Attributname] = @EigenesFeldName1) AS [Datentyp1],
    @EigenesFeldName2 AS [Attributname2],
    (SELECT CTE.[Attributwert] FROM CTE WHERE CTE.[Artikelnummer] = vStdA.cArtNr AND CTE.[Attributname] = @EigenesFeldName2) AS [Wert2],
    (SELECT CTE.[Attributdatentyp] FROM CTE WHERE CTE.[Artikelnummer] = vStdA.cArtNr AND CTE.[Attributname] = @EigenesFeldName2) AS [Datentyp2],
    @EigenesFeldName3 AS [Attributname3],
    (SELECT CTE.[Attributwert] FROM CTE WHERE CTE.[Artikelnummer] = vStdA.cArtNr AND CTE.[Attributname] = @EigenesFeldName3) AS [Wert3],
    (SELECT CTE.[Attributdatentyp] FROM CTE WHERE CTE.[Artikelnummer] = vStdA.cArtNr AND CTE.[Attributname] = @EigenesFeldName3) AS [Datentyp3]
FROM vStandardArtikel AS vStdA
WHERE vStdA.cArtNr LIKE 'PT%';

Solange keine Eigenen Felder identische Namen haben und tatsächlich auch immer tArtikelAttributSprache.kSprache = 0 ist, sollte das so funktionieren. Ich hoffe, ich habe die Tabellennamen überall richtig von Dir übernommen.
 
  • Gefällt mir
Reaktionen: Felix-lg

Felix-lg

Aktives Mitglied
22. November 2022
76
19
Moin! Vielen Dank für deine Mühe! Dein Code funktioniert so auf Anhieb einwandfrei :thumbsup:
Eine richtig gute Option um von der zeilenweisen Ausgabe wegzukommen!

@John Dein Tool kannte ich schon, ist auch sehr hilfreich! 😉
 
Zuletzt bearbeitet:

frankell

Sehr aktives Mitglied
9. September 2019
2.559
780
Flensburg
Moin! Vielen Dank für deine Mühe! Dein Code funktioniert so auf Anhieb einwandfrei :thumbsup:
Eine richtig gute Option um von der zeilenweisen Ausgabe wegzukommen!

Dein Tool kannte ich schon, ist auch sehr hilfreich! 😉
Du hast Dir ja offensichtlich mit vStandardArtikel bereits eine eigene View gebastelt. Selbiges habe ich auch gemacht, weil ich immer wieder auf bestimmte Daten zurückgreifen muss, die ich sonst nur mit diversen JOINs abfragen kann. Was bei Dir grad die Eigenen Felder sind, sind bei uns die Attribute und Merkmale. Die habe ich allesamt in eine View inkludiert, so dass ich nur noch diese View abfragen muss, die grundsätzlich auf tArtikel basiert und damit auch nur einen Record pro Artikel beinhaltet. Wird bei Deiner View wohl auch so sein (reine Vermutung).

Vielleicht ist es eine Idee auch für Dich, die Eigenen Felder zu integrieren. Das macht zwar die View etwas langsamer, aber mir hat das schon viel Zeit beim Coden erspart. :)
 

Felix-lg

Aktives Mitglied
22. November 2022
76
19
Moin!
Das mit dem View ist eine gute Idee, das werde ich im Hinterkopf behalten. Bin ich garnicht draufgekommen... Die vStandardArtikel habe ich mir nämlich nicht selbst gebaut. Die ist im Standard schon vorhanden. Das habe ich aus dem verlinkten Thread von @John!
Die StandardArtikel ist oft hilfreich...
Gruß
Felix
 
  • Gefällt mir
Reaktionen: frankell
Ähnliche Themen
Titel Forum Antworten Datum
Ameisen-Vorlagen Attribute und Eigene Felder lassen sich nicht speichern JTL-Wawi 1.11 2
Neu eigene Felder Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 5
Artikel Eigene Felder kommen nur beim ersten Shopabgleich in den JTL-Shop JTL-Wawi 1.11 2
Neu wie Wawi eigene Felder (Kunden) an Shop DB übertragen? User helfen Usern - Fragen zu JTL-Wawi 3
Neu Export eigene Felder User helfen Usern - Fragen zu JTL-Wawi 3
Neu Kunden-Daten Import / Eigene Felder User helfen Usern - Fragen zu JTL-Wawi 1
Neu Ausgabe (drucken) Auftrag "eigene Felder" oder "Auftragspositionen.Bezeichnung" Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Eigene Felder des Artikels per Exportvorlage Auftrag auslesen Schnittstellen Import / Export 0
Ameise: Eigene Exporte umbenennen? JTL-Wawi 1.8 6
Neu Händlerartikelnummer druch eigene im Auftrag ersetzen User helfen Usern - Fragen zu JTL-Wawi 0
JTL Wawi App eigene Statistiken erscheinen nicht JTL-Wawi App 0
Eigene Spalten in Vorlagen (Rechnung, Angebot, Lieferschein etc.) JTL-Wawi 1.11 4
Neu Eigene Übersichten nicht mehr möglich? JTL-Wawi - Fehler und Bugs 4
Neu In welcher Datenbank-Tabelle sind Wertelisten und deren IDS von Eigenen Felder gespeichert? User helfen Usern - Fragen zu JTL-Wawi 8
Auftrags Import via Ameise keine Eigenen Felder?! JTL-Wawi 1.9 1

Ähnliche Themen