1

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
4

2 に答える 2

1
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
于 2012-10-11T00:08:24.710 に答える
0

新しい列を追加すると、NumListが変更されるたびに、計算を実行し、挿入または更新時に新しい列にデータを入力するためのトリガーを作成する必要があります。トリガーは、NumListから数値を解析し、計算を実行してから、結果を新しい列に配置する必要があります。

T-SQLのビット演算子の説明については、以下のリンクを参照してください(ただし、演​​算子の使用方法はすでに知っているようで、列にデータを入力する方法を知りたいと思っていましたか?)

http://msdn.microsoft.com/en-us/library/ms176122.aspx

于 2012-10-10T20:49:48.503 に答える