Neu Eigene Felder / Attribute spaltenweise exportieren

Felix-lg

Mitglied
22. November 2022
70
16
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
301
170
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

Mitglied
22. November 2022
70
16
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
301
170
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

Mitglied
22. November 2022
70
16
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
Neu Wie kann ich über eigene Felder eine Mehrfachauswahl erstellen? User helfen Usern - Fragen zu JTL-Wawi 4
Eigene Felder lassen sich in der Wawi nicht löschen JTL-Wawi 1.8 0
Neu Eigene Felder in Neuregistrierungs-Email an Kunden ausgeben JTL-Shop 5.2.4 Allgemeine Fragen zu JTL-Shop 0
Neu CustomWorkflow zum Setzen von einem Hinweis für Auftragspositionen (Wert aus Eigene Felder per Workflow) Dienstleistung, Jobs und Ähnliches 13
Neu Eigene Felder aus Artikel in Rechnungsmail Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Auftrag: Eigene Felder in DotLiquid Vorlage verwenden [Wawi 1.9.4.5] [SQL] JTL-Wawi 1.9 8
Neu Eigene Übersichten - Beschaffung - Bestellvorschläge - nur Standardlieferant anzeigen Eigene Übersichten in der JTL-Wawi 4
Neu Eigene Übersicht Kunde QR Code Kundennummer Eigene Übersichten in der JTL-Wawi 4
Eigene USt-IdNr. fehlt in der Auftragsansicht bei Auslandsbestellungen (JTL-Wawi 1.8.12.2) JTL-Wawi 1.8 3
Neu Eigene Alerts im Template ausgeben bzw. hinzufügen Templates für JTL-Shop 0
Neu eigene Tabs in Ebay Vorlage einfügen eBay-Designvorlagen - Fehler und Bugs 0
Beantwortet Lagerplatz Kommentar 1 in Eigene Übersicht Eigene Übersichten in der JTL-Wawi 5
Neu Eigene Seiten mit externer Verlinkung nicht mehr bearbeitbar JTL-Shop - Fehler und Bugs 1
Neu Auftrag->Eigene Übersichten Anzeigen lassen in welchem Lager ist wieviel Bestand. Eigene Übersichten in der JTL-Wawi 2
Neu Eigene Übersicht in 360°-Sicht Eigene Übersichten in der JTL-Wawi 0
Neu Eigene Inhalte => Link auf Externe Seite - kein speichern möglich Allgemeine Fragen zu JTL-Shop 5
Neu Zuordnung der Felder in EVO Designvorlage eBay-Designvorlagen - Ideen, Lob und Kritik 0
Neu Per Plugin Felder für das Newsletter-Anmeldungs-Template hinzufügen Technische Fragen zu Plugins und Templates 2
Verkaufskanalspezifische Felder fest zuordnen Otto.de - Anbindung (SCX) 2
Neu JTL Ameise Attribute JTL-Wawi - Fehler und Bugs 2
Warum haben einige Kaufland Kategorien keine mappbaren Attribute, Nachbarn schon? kaufland.de - Anbindung (SCX) 11
Neu Exportformat erstellen Kategorie Attribute exportieren Allgemeine Fragen zu JTL-Shop 0
Neu JTL Wawi REST API Zugriff auf Artikel-Attribute und Inhalt und Menge eines Artikels Schnittstellen Import / Export 0
JTL WAWI REST API: Zugriff auf Artikel-Attribute JTL-Wawi 1.8 2

Ähnliche Themen