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 BY
和 SUM
:
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;
我假设括号中的文字是为了参考,而不是实际值,因此我们可以使用简单的聚合。
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
我有一个 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 BY
和 SUM
:
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;
我假设括号中的文字是为了参考,而不是实际值,因此我们可以使用简单的聚合。
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