Вот версия, использующая XML для того, что вы хотите. Я не проверял производительность по сравнению с другими методами, предложенными в комментариях.
Не могу понять, почему StartDate
должно быть в обеих таблицах, кроме того, что оно является частью PK в таблице Items
. Если StartDate
не является частью PK, вы можете безопасно удалить его из всех объединений.
declare @Items table
(
ItemNo int,
StartDate date
)
declare @Translation table
(
ItemNo int,
StartDate date,
Language varchar(2),
Description varchar(20)
)
insert into @Items values
(123, '2011-11-02')
insert into @Translation values
(123, '2011-11-02', 'DK', 'Bla1'),
(123, '2011-11-02', 'SE', 'Bla2')
select I.ItemNo,
I.StartDate,
T.Trans.value('(Trans[@Language="DK"]/Desc)[1]', 'varchar(20)') as DK,
T.Trans.value('(Trans[@Language="SE"]/Desc)[1]', 'varchar(20)') as SE
from @Items as I
inner join (select T1.ItemNo,
T1.StartDate,
(select T2.Language as '@Language',
T2.Description as 'Desc'
from @Translation as T2
where T1.ItemNo = T2.ItemNo and
T1.StartDate = T2.StartDate
for xml path('Trans'), type) as Trans
from @Translation as T1
group by T1.ItemNo,
T1.StartDate) as T
on I.ItemNo = T.ItemNo and
I.StartDate = T.StartDate