Tagged Values als Spalten bei der Suche ausgeben

Eine sehr oft gestellte Aufgabe bei der Modell-Suche ist, dass für jedes Modell-Element seine Tagged Values als jeweils in einer eigenen Spalte ausgegeben werden sollen.
Tagged Values werden in der Tabelle t_objectproperties gespeichert. Wir können nun die Tabelle t_object, in der alle Modell-Elemente gespeichert werden mit der
Tabelle t_objectproperties verknüpfen, so erhalten wir alle Tagged Values für jedes Modell-Element.

SELECT t_object.Name, t_objectproperties.Property, t_objectproperties.Value 
FROM t_object 
LEFT OUTER JOIN t_objectproperties ON t_object.Object_ID = t_objectproperties.Object_ID

Doch leider erhalten wir dabei jeweils eine Spalte für den Tag-Namen und eine für den Tag-Wert und dies für jedes Tagged Value eines Modell-Element.
Wir erhalten also eine Menge an duplizierten Zeilen, die sich nur durch ihren Tag-Namen oder Tag-Wert unterscheiden.

Wir hätten aber gerne für jeden Tag-Namen eine eigene Spalte und falls das Modell-Element einen Wert für diesen Tag-Namen hat, soll dieser angezeigt werden.
Was wir nun tun können ist, dass wir alle Modell-Elemente suchen und bestimmte Tag-Namen definieren, welche wir als eigene Spalten ausgeben möchten.

SELECT 
t_object.Object_ID,
t_object.Name, 
a.Value AS myA, //gib eine Spalte mit Namen myA aus und schreibe den Wert des Tags aus der Menge a hinein.
b.Value AS myB  //gib eine Spalte mit Namen myB aus und schreibe den Wert des Tags aus der Menge b hinein.
FROM (t_object 
LEFT OUTER JOIN t_objectproperties AS a ON (t_object.Object_ID = a.Object_ID AND a.Property = 'myA')) // alle Tagged Values des Modell-Elementes mit dem Namen myA 
LEFT OUTER JOIN t_objectproperties AS b ON (t_object.Object_ID = b.Object_ID AND b.Property = 'myB')  // alle Tagged Values des Modell-Element mit dem Namen myB

Mit diesem Ansatz erhalten wir zwar nicht alle Tagged Values jedes Modell-Element, aber für jeden definierten Tag-Namen eine eigene Spalte.

Fügen wir in der Projektion noch folgende Zeilen hinzu, wird der Tagged Value View alle weiteren Tags des selektierten Modell-Element in der Ergebnistabelle anzeigen.

SELECT
t_object.ea_guid AS CLASSGUID,
t_object.Object_Type AS CLASSTYPE,

Veröffentlicht unter Modell-Suche
Schlagworte: