Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#6

Re: [SQL] Zeilenwerte als Spalten ausgeben

  Alt 24. Mär 2009, 14:06
Hallo,
Zitat von Reinhardtinho:
Da die Merkmale dynamisch sind, kann ich das nicht fest mit Size bzw. Color verdrahten. Zu Zeitpunkt der Abfrage kenne ich nicht alle Properties.
dann erstelle doch das SQL auch dynamisch:
SQL-Code:
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
Vorgehen:

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'
  Mit Zitat antworten Zitat