属性:件名のIDを表しSQLは、私はこのようになりますEAVテーブル設計さ
SID AID VID
1 1 1
1 2 1
1 3 2
1 4 3
1 1 2
SIDを、AIDは、属性IDの略で、VIDは、テーブルもValuedID
の略
:属性テーブルにリンクされ、最初のテーブルの上にピボットを使用した後AttributeID AttributeName
1 Hobbies
2 Name
3 Gender
4 IrisColor
:属性をマップするには
SubjectID Hobbies Name Gender IrisColor
1 1 1 2 3
ほとんど正しい
が、(趣味です)SubjectAttribute 1は、最初のテーブル内の1つのより多くの時間を表示されます(SubjectDetails)ので、私が達成したいことはこれです:
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
10私はこれを取得します:
SubjectID Hobbies Name Gender IrisColor
1 **1,2** 1 2 3
私は、セパレータが使用されているものを気にしないことを言及する必要があり、私はそれがあるSTUFF機能ではなく、痛みがPIVOTとSTUFFを結合することをやってみましたことを(または私は知りませんどのように)..任意の提案?
を使用する必要が考えていないあなたは、あなたのソースEAVテーブルを変更することができますクエリ。 –
私はそれが理由ではありません。繰り返されても、各属性に対して別々の行を持つ必要があります。私はビューでそれをするのは嫌いですが、カンマ区切りで保存するのではなくて – berthos