![]() |
Datenbank: MSSQL Server 2000 • Zugriff über: SQL-Script
[SQL] Zeilenwerte als Spalten ausgeben
Hi zusammen,
ich möchte gerne Zeilen einer SQL-Tabelle als Spalten ausgeben lassen. Ich habe eine Tabelle "Article" in der Merkmale zu einem Artikel stehen. In der Tabelle "ArticleProperty" stehen zu jedem Eintrag in Artikel weitere dynamische Merkmale. So sind meine Tabellen aufgebaut: Article
Code:
ArticleProperty
ArticleNumber (PK)
EAN Supplier ...
Code:
In "ArticleProperty" könnte zb drin stehen.
ArticleNumber (PK)
TypeID (PK) Value
Code:
Jetzt weiß ich nicht, wie ich die SQL-Abfrage aufbauen soll, damit ich den Artikel in einer flachen Struktur mit all seinen Merkmalen ausgeben kann.
ArticleNumber TypeID Value
4711 Size M 4711 Color Blue
Code:
Bin für jeden Tipp dankbar.
ArticleNumber EAN Supplier Size Color
MFG |
Re: [SQL] Zeilenwerte als Spalten ausgeben
Such mal unter dem Schlagwort "PIVOT". Evtl. bekommst du es damit hin.
Ansonsten würde ich es erst im Client passend umformen und die DB außen vor lassen. |
Re: [SQL] Zeilenwerte als Spalten ausgeben
Hallo,
versuche es doch mal damit:
SQL-Code:
Die Tabelle ArticleProperty wird zweimal in das From genommen, um einmal den Satz mit TypeID = Size und einmal den Satz mit TypeID = Color zu lesen.
select
Article.ArticleNumber, Article.EAN, Article.Supplier, ArticlePropertySize.Value As Size, ArticlePropertyColor.Value As Color from Article, ArticleProperty ArticlePropertySize, ArticleProperty ArticlePropertyColor where Article.ArticleNumber = ArticlePropertySize.ArticleNumber and ArticlePropertySize.TypeID = 'Size' and Article.ArticleNumber = ArticlePropertyColor.ArticleNumber and ArticlePropertyColor.TypeID = 'Color' |
Re: [SQL] Zeilenwerte als Spalten ausgeben
Danke für die Antworten.
@Nahpets Da die Merkmale dynamisch sind, kann ich das nicht fest mit Size bzw. Color verdrahten. Zu Zeitpunkt der Abfrage kenne ich nicht alle Properties. @Bernhard Geyer Ich habe mir vorher auch schon diverse Beispiele mit "PIVOT" angeschaut, allerdings war dort das selbe Schema, dass man die Properties schon alle kennen musste. Mir bleibt anscheinend nichts anderes übrig, als das nachträglich im Client umzuformen. Ich hatte gehofft, dafür gibt es eine Möglichkeit, dass mit einem SQL-Script aufzubereiten. |
Re: [SQL] Zeilenwerte als Spalten ausgeben
![]() |
Re: [SQL] Zeilenwerte als Spalten ausgeben
Hallo,
Zitat:
SQL-Code:
Vorgehen:
select
'select ' union all select Distinct 'ArticleProperty' + RTrim(TypeID) + '.Value As ' + RTrim(TypeID) + ', ' from articleproperty union all select 'Article.ArticleNumber, ' + 'Article.EAN, ' + 'Article.Supplier ' + 'from Article ' union all select Distinct 'left join ArticleProperty ArticleProperty' + RTrim(TypeID) + ' on article.articleNumber = ' + 'ArticleProperty' + RTrim(TypeID) + '.articleNumber ' + 'and ArticleProperty' + RTrim(TypeID) + '.TypeID = ''' + RTrim(TypeID) + '''' from articleproperty Dieses SQL ausführen, das Ergebnis auslesen und einer Query als SQL zuweisen und dann ausführen. Es wird zuerst ein SQL erstellt, das für jeden Eintrag von TypeID eine Spalte in das SQL-Ergebnis schreibt und für jeden Eintrag von TypeID einen Left Join für das From erstellt. Das hierdurch erstellte SQL entspricht dann immer dem aktuellen Datenbestand der Tabelle ArticleProperty. Das Gesamtergebnis enthält immer die Spalten ArticleNumber, EAN und Supplier, sowie für jeden Eintrag von TypeID in ArticleProperty eine weitere Spalte. Die dynamischen Spalten werden zuerst ausgegeben, um eine korrekte SQL-Syntax zu generieren, ohne auf eventuell überzählige Kommata achten zu müssen. Diese SQL wurde mit dem oben aufgeführten SQL erstellt.
SQL-Code:
select
ArticlePropertyColor.Value As Color, ArticlePropertyMaterial.Value As Material, ArticlePropertySize.Value As Size, Article.ArticleNumber, Article.EAN, Article.Supplier from Article left join ArticleProperty ArticlePropertyColor on article.articleNumber = ArticlePropertyColor.articleNumber and ArticlePropertyColor.TypeID = 'Color' left join ArticleProperty ArticlePropertyMaterial on article.articleNumber = ArticlePropertyMaterial.articleNumber and ArticlePropertyMaterial.TypeID = 'Material' left join ArticleProperty ArticlePropertySize on article.articleNumber = ArticlePropertySize.articleNumber and ArticlePropertySize.TypeID = 'Size' |
Re: [SQL] Zeilenwerte als Spalten ausgeben
Das funktioniert perfekt.
Vielen Dank. Damit hast du mir sehr geholfen. Natürlich auch Dank an alle anderen :wink: :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz