2011-09-09 11 views
3

EAVテーブル(各行に単純なキー/値)があり、2つの行から '値'を取り出し、1列の単一の行に連結する必要があります。私はちょうどピボットをまっすぐに持っている部分を通過するように見えることはできません。誰も私がこれを理解するのを助けることができますか?EAVデータを取得するピボット

ます
Declare @eavHelp Table 
(
    [Key]   VARCHAR (8)  NOT NULL, 
    [Value]  VARCHAR (8)  NULL 
) 
Insert Into @eavHelp Values ('key1' , 'aaa')  
Insert Into @eavHelp Values ('key2' , 'bbb') 

Select * From @eavHelp 
Pivot 
( Min([Value]) 
    For [Value] in (hmm1 , hmm2) 
) 
as Piv Where [Key] = 'key1' or [Key] = 'key2' 

Key  hmm1  hmm2 
-------- -------- -------- 
key1  NULL  NULL 
key2  NULL  NULL 

をしかし、私がしたいことは次のとおりです。

hmmmX 
----- 
aaa;bbb 
+0

1サンプルデータとテーブルをありがとうございました。 –

答えて

4

本当にピボットする必要はありません。新しい要件を追加する

EDIT(;区切り):

SELECT hmmmX = STUFF((SELECT ';' + [Value] FROM @eavHelp 
    WHERE [Key] IN ('key1', 'key2') 
    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, ''); 
+0

これはsmokin 'ですが、私はXMLメソッド(元の質問ではありません)で各値の間にデリミタを入れるのに問題があります。 – Snowy

+0

答えが更新されました... –

1
Declare @eavHelp Table 
( 
    [Key]   VARCHAR (8)  NOT NULL, 
    [Value]  VARCHAR (8)  NULL 
) 
Insert Into @eavHelp Values ('key1' , 'aaa')  
Insert Into @eavHelp Values ('key2' , 'bbb') 

declare @concat nvarchar(max); select @concat ='' 
select @concat [email protected]+case when len(@concat)>0 then '; ' else '' end + value from @eavHelp 
select @concat 
関連する問題