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'