SQL 服务器:从 ID 列到 Bitwise/Flag 列

SQL Server: From ID column to Bitwise/Flag column

我有一个 table 的应用程序(主)具有这样的数据结构:

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

还有一个 child table 这样的:('--' 表示 'comment')

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

我想通过使用 BitFlag 列来缩小这个 table,在 child table 的 int-bitwise 列中,像这样:

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

目前,我正在制作一个 ConsoleApp 以从当前结构转换为新结构,我这样做是因为,今天,我们的 'child table' 有超过 30 万行,其中 90% 是重复的仅具有不同 ApplicationId 的文本。

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

提前致谢。

您可以使用 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

我假设括号中的文字是为了参考,而不是实际值,因此我们可以使用简单的聚合。

declare @master table (id int, NameColumn varchar(64), BitFlag int)
insert into @master
values
(1,'Appl1',1),
(2,'Appl2',2),
(3,'Appl3',4),
(4,'Appl4',8)

declare @child table (TextColumn varchar(64), IdColumn varchar(64))
insert into @child
values
('SameText',1),
('SameText',2),
('OtherText',3)

select
    c.TextColumn
    ,BitFlag = sum(m.BitFlag)
from
    @child c
    inner join
        @master m on
        m.ID = c.IdColumn
group by
    c.TextColumn