これを実行するには、動的PIVOT句を使用する必要があります。
EDIT:
[OK]をので、私はいくつかは遊んで、次のサンプルデータに基づいて行ってきた:
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)
これはあなたに次のような出力が得られます。
これは、維持するために悪夢になり、現時点では動作しますが。私はこれらの結果を他のどこかで達成しようと勧めています。つまりSQLではありません!
幸運を祈る!
私は個人的にあなたのデザインを変更します。キー値テーブルは、効率的かつ正しく動作するためには非常に難しい設計です。キー値ペアが本当に必要な場合は、リレーショナルデータベースがそれらを格納するのに最適な場所ではないかもしれません。 noSQLデータベースが良い選択かもしれません。 – HLGEM
はい、私はこれがこの問題を解決するための素晴らしい方法ではないことを知っていますが、私はこれを一度だけ必要とし、どのアプリケーションにも実装されません。 – picknick