2列のテーブルがあります。
ID (INT) (PK) NumList (VARCHAR)
1 2,4,25
2 2,12,25,33
3 3,10
このテーブルに列を追加し、リスト内の数値にOR(|)演算子を適用するとしたらどうでしょうか。
ID NewCol
1 31
2 63
3 11
2列のテーブルがあります。
ID (INT) (PK) NumList (VARCHAR)
1 2,4,25
2 2,12,25,33
3 3,10
このテーブルに列を追加し、リスト内の数値にOR(|)演算子を適用するとしたらどうでしょうか。
ID NewCol
1 31
2 63
3 11
create table tbl (
ID int,
NumList VARCHAR(100));
insert tbl select
1, '2,4,25' union all select
2, '2,12,25,33' union all select
3, '3,10';
select t.ID, t.NumList, sum(distinct power(2,v.number)) newcol
from tbl T
outer apply (values (cast('<a>'+REPLACE(NumList,',','</a><a>')+'</a>' as xml))) X(xml)
outer apply X.xml.nodes('/a') N(Num)
left join master..spt_values v on v.type='P' and v.number between 0 and 30
and power(2,v.number) & N.Num.value('.','bigint') > 0
group by t.ID, t.NumList
order by t.ID
=== results
ID NumList newcol
---- ------------ -----------
1 2,4,25 31
2 2,12,25,33 63
3 3,10 11
新しい列を追加すると、NumListが変更されるたびに、計算を実行し、挿入または更新時に新しい列にデータを入力するためのトリガーを作成する必要があります。トリガーは、NumListから数値を解析し、計算を実行してから、結果を新しい列に配置する必要があります。
T-SQLのビット演算子の説明については、以下のリンクを参照してください(ただし、演算子の使用方法はすでに知っているようで、列にデータを入力する方法を知りたいと思っていましたか?)