我有一个有 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 中按位运算符的说明,请参阅下面的链接(尽管您似乎已经知道如何使用这些运算符,只是想知道如何填充列?)