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 回答