Чтобы сделать это, вам нужно использовать динамическое PIVOT предложение.
РЕДАКТИРОВАТЬ:
Хорошо, поэтому я немного поэкспериментировал и наследующие примеры данных:
Create Table TableA
(
IDCol int,
SomeValue varchar(50)
)
Create Table TableB
(
IDCol int,
KEYCol int,
Value varchar(50)
)
Insert into TableA
Values (1, '123223')
Insert Into TableA
Values (2,'1232ff')
Insert into TableA
Values (3, '222222')
Insert Into TableB
Values( 23, 1, 435)
Insert Into TableB
Values( 24, 1, 436)
Insert Into TableB
Values( 25, 3, 45)
Insert Into TableB
Values( 26, 3, 46)
Insert Into TableB
Values( 27, 3, 435)
Insert Into TableB
Values( 28, 3, 437)
Вы можете выполнить следующий динамический SQL.
declare @sql varchar(max)
declare @pivot_list varchar(max)
declare @pivot_select varchar(max)
Select
@pivot_list = Coalesce(@Pivot_List + ', ','') + '[' + Value +']',
@Pivot_select = Coalesce(@pivot_Select, ', ','') +'IsNull([' + Value +'],'''') as [' + Value + '],'
From
(
Select distinct Value From dbo.TableB
)PivotCodes
Set @Sql = '
;With p as (
Select a.IdCol,
a.SomeValue,
b.Value
From dbo.TableA a
Left Join dbo.TableB b on a.IdCol = b.KeyCol
)
Select IdCol, SomeValue ' + Left(@pivot_select, Len(@Pivot_Select)-1) + '
From p
Pivot ( Max(Value) for Value in (' + @pivot_list + '
)
)as pvt
'
exec (@sql)
Это даст следующий вывод:
![alt text](https://i.stack.imgur.com/HsF4S.png)
Хотя в данный момент это работает, поддерживать его было бы кошмаром.Я бы порекомендовал попытаться достичь этих результатов где-нибудь еще.т.е. не в SQL!
Удачи!