SQL Server:从ID列到Bitwise / Flag列

时间:2017-08-22 18:21:41

标签: sql-server database data-structures bit-manipulation database-administration

我有一个应用程序表(master),其数据结构如下:

Id | NameColumn | BitFlag
1    'Appl1'      1
2    'Appl2'      2
3    'Appl3'      4
4    'Appl4'      8

这样的子表:(' - '表示'评论')

TextColumn    | IdColumn
'SameText'     1  --(app1) 
'SameText'     2  --(app2) 
'OtherText'    3  --(app3)

我想通过在子表的int-bitwise列中使用BitFlag列缩小此表,如下所示:

TextColumn    | BitFlag
'SameText'       3 -- (1[app1] + 2[app2])
'OtherText'      4 -- ([app3])

我目前正在使ConsoleApp从当前结构转换为新结构,我这样做是因为,今天,我们的'子表'有超过300k行,90%只是重复文本一个不同的ApplicationId。

如果有人可以提供一些有关如何使用SQL-Only实现此目的的见解 代码或对此有任何想法,我很乐意听到。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用GROUP BYSUM

SELECT c.TextColumn, SUM(m.BitFlag) AS BitFlag
FROM t_child c
LEFT JOIN t_master m
  ON c.IDColumn = m.ID
GROUP BY c.TextColumn;

<强> RextesterDemo

答案 1 :(得分:1)

我假设括号文本仅供参考,而非实际值,因此我们可以使用简单的聚合。

~array()