2011-09-09 148 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