ich eine EAV Tisch entworfen, die wie folgt aussieht:SQL PIVOT Verwendung für Multi bewertet Attribute
SID AID VID
1 1 1
1 2 1
1 3 2
1 4 3
1 1 2
SID für Betreff ID stehen, AID steht für Attribut-ID und VID steht für ValuedID
auch einen Tisch
AttributeID AttributeName
1 Hobbies
2 Name
3 Gender
4 IrisColor
nach der Verwendung von Drehzapfen an dem ersten Tisch, verbunden mit der Attributtabelle: die Attribute abzubilden
SELECT
SubjectID,
Hobbies,
Name,
Gender,
IrisColor
FROM
(
SELECT SubjectID, attr.AttributeName as attribute, ValueID from SubjectDetails, SubjectAttributes as attr WHERE SubjectDetails.AttributeID=attr.ID
) as t
PIVOT(
MAX(ValueID)
FOR attribute IN (Hobbies,Name,Gender,IrisColor)) AS t1
WHERE SubjectID=1
ich dieses:
SubjectID Hobbies Name Gender IrisColor
1 1 1 2 3
die fast richtig, aber SubjectAttribute 1 erscheint eine in der ersten Tabelle mehr Zeit (die Hobbys ist) (SubjectDetails), also was ich erreichen möchte, ist dies:
SubjectID Hobbies Name Gender IrisColor
1 **1,2** 1 2 3
ich habe zu erwähnen, dass ich nicht über egal was Separator verwendet wird, und dass ich versuchte zu tun, dass mit der Funktion STUFF, aber es ist ein Schmerz PIVOT und STUFF zu kombinieren (oder ich weiß nur nicht, wie) .. Irgendwelche Vorschläge?
Sie verwenden, um Ihre Quelle EAV-Tabelle zu ändern, so dass es eine Zeile pro Attribut mit comma separated values hat und schwenken dann Pivot mit Abfrage. –
Ich kann nicht, dass .. die Anforderung ist separate Zeilen für jedes Attribut, auch wenn es wiederholt. Ich möchte das nur in einer Ansicht machen, aber nicht so, wie es mit Kommatrennung gespeichert wird. – berthos