计算一个单词在列中存在的次数

问题描述 投票:0回答:3

我有一个表1:

CREATE TABLE table1
INSERT INTO table1 values('XYZ')
INSERT INTO table1 values('ABC')
INSERT INTO table1 values('XYZ~ABC~AAA')
INSERT INTO table1 values('123')

然后,我有字符串'ABC〜XYZ〜123'。我需要使用SQL将字符串拆分成每个单词:

Select VALUE FROM STRING_SPLIT('ABC~XYZ~123','~')

返回表2

ABC
XYZ
123

我想计算表2中每个单词在表1中存在的次数

预期输出是

ABC|3
XYZ|2
123|1

对此有何想法?

sql-server ssms ssms-2016
3个回答
0
投票

除了注释中的建议之外,还可以如下使用Count()功能。但是以这种格式存储将使您难以提取以及与其他表连接。

Select T1Value, Count(*) as [NoCount] from(
 Select table1.Value as T1Value, Value FROM STRING_SPLIT('ABC~XYZ~123','~')
 inner join table1 on Value = table1.Value
)a group by T1Value

0
投票

如果我正确理解了你的情况,下一条话可能会有所帮助:]

文本和表格:

DECLARE @text varchar(100) = 'ABC~XYZ~123'
CREATE TABLE Data (
   Id int,
   [Text] varchar(100)
)
INSERT INTO Data
   (Id, [Text])
VALUES
   (1, 'XYZ'),
   (2, 'ABC'),
   (3, 'XYZ~ABC~AAA'),
   (4, '123~ABC')

声明:

SELECT t.[value] AS [Word], j.[Count]
FROM STRING_SPLIT(@text, '~') t
INNER JOIN (
   SELECT s.[value], COUNT(*) AS [Count]
   FROM Data d
   CROSS APPLY STRING_SPLIT(d.[Text], '~') s
   GROUP BY s.[value]
) j ON t.[value] = j.[value]

结果:

-----------
Word  Count
-----------
ABC   3
XYZ   2
123   1

0
投票

设置

© www.soinside.com 2019 - 2024. All rights reserved.