Pivot для получения данных EAV - PullRequest
       26

Pivot для получения данных EAV

3 голосов
/ 09 сентября 2011

У меня есть таблица 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

Ответы [ 2 ]

4 голосов
/ 09 сентября 2011

На самом деле не нужно поворачиваться.

РЕДАКТИРОВАТЬ , чтобы добавить новое требование (; разделитель):

SELECT hmmmX = STUFF((SELECT ';' + [Value] FROM @eavHelp 
    WHERE [Key] IN ('key1', 'key2')
    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '');
1 голос
/ 13 октября 2012
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 =@concat+case when len(@concat)>0 then '; ' else '' end + value from    @eavHelp
select @concat
...