2011-09-09 61 views
3

我有一個EAV表(簡單的鍵/值在每一行),我需要從兩個行取'值',並將它們連接成一列與單個列。我似乎無法通過我剛剛擺脫樞軸的部分。任何人都可以幫我解決這個問題嗎?樞軸獲取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

真的不需要轉動。

編輯增加新的要求(;分隔符):

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

這是冒煙',但我有一個問題,使用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