0

DCP_SC_DOT_TBL私は 2 つのキーSETIDとがあるレコードを持っていますCONTRACTID。これに加えて、チェックボックスで値Yまたはを含む 78 個の列がありますBlank。例えば:

SETID CONTRACTID  1  2   3 ...... 78  
DCPID  00102      Y      Y
DCPID  00192         Y   Y         Y

これらの列をすべて削除し、空白以外の列ごとに新しい行を作成して、たとえば次のようにテーブルを作成します。

SETID CONTRACTID Checkbox(New column for all the 78 columns)
DCPID  00102      1
DCPID  00102      3
DCPID  00192      2
DCPID  00192      3
DCPID  00192      78

誰かがこれを達成する方法を提案できますか? sに対するデータを含む列のみが必要ですCONTRACTID

4

1 に答える 1

0

あなたの投稿を読み直すと、単純に大きなユニオン クエリが必要なように思えます。

Select SetId, ContractId, '1' As ColNum, 
From SomeTable As S1
Where S1.Col1 = 'Y'
Union All
Select SetId, ContractId, '2'
From SomeTable As S1
Where S1.Col2 = 'Y'
Union All
Select SetId, ContractId, '3'
From SomeTable As S1
Where S1.Col3 = 'Y'
...
Union All
Select SetId, ContractId, '78'
From SomeTable As S1
Where S1.Col78 = 'Y'

メイン テーブルから他の情報を取得したい場合は、この結果セットを結合します。

Select
From SomeTable As S
        Join    (
                Select SetId, ContractId, '1' As ColNum, 
                From SomeTable As S1
                Where S1.Col1 = 'Y'
                Union All
                Select SetId, ContractId, '2'
                From SomeTable As S1
                Where S1.Col2 = 'Y'
                Union All
                Select SetId, ContractId, '3'
                From SomeTable As S1
                Where S1.Col3 = 'Y'
                ...
                Union All
                Select SetId, ContractId, '78'
                From SomeTable As S1
                Where S1.Col78 = 'Y'
                ) As Z
            On Z.SetId = S.SetId
                And Z.ContractId = S.ContractId
于 2012-04-26T04:38:31.443 に答える