首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算一个单词在列中存在的次数

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

Stack Overflow用户
提问于 2020-01-15 10:31:53
回答 3查看 407关注 0票数 0

我有一张表1:

代码语言:javascript
复制
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将这个字符串拆分为每个单词:

代码语言:javascript
复制
Select VALUE FROM STRING_SPLIT('ABC~XYZ~123','~')

返回的是table2

代码语言:javascript
复制
ABC
XYZ
123

我想数一数table2中每个单词在表1中存在的次数

预期输出是

代码语言:javascript
复制
ABC|3
XYZ|2
123|1

对此有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-15 10:54:53

如果我正确理解你的情况,下面的陈述可能会有所帮助:

案文和表格:

代码语言:javascript
复制
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')

声明:

代码语言:javascript
复制
SELECT t.[value] AS [Word], j.[Count]
FROM STRING_SPLIT(@text, '~') t
LEFT 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]

结果:

代码语言:javascript
复制
-----------
Word  Count
-----------
ABC   3
XYZ   2
123   1
票数 1
EN

Stack Overflow用户

发布于 2020-01-15 10:42:16

除了注释中的建议之外,您还可以使用计数()函数,如下所示。但是,以这种格式存储将给提取和连接其他表带来困难。

代码语言:javascript
复制
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

编辑

代码语言:javascript
复制
CREATE TABLE table1(
  TableValue varchar(max)
);

INSERT INTO table1 (TableValue) values ( 'XYZ');
INSERT INTO table1 ( TableValue) values ( 'ABC');
INSERT INTO table1 ( TableValue) values ( 'XYZ~ABC~AAA');
INSERT INTO table1 ( TableValue) values ( '123~ABC');

SELECT b.value
    ,Count(*)
FROM (
    SELECT VALUE
    FROM STRING_SPLIT('ABC~XYZ~123', '~')
    ) a
INNER JOIN (
    SELECT *
    FROM table1
    CROSS APPLY STRING_SPLIT(TableValue, '~')
    ) b ON a.Value = b.Value
GROUP BY b.Value

下面是给定的Live Demo on db <> fiddle

票数 0
EN

Stack Overflow用户

发布于 2020-01-15 11:01:35

设置

代码语言:javascript
复制
create table STRINGS (ID int, STRINGS varchar(max));

insert into STRINGS (ID, STRINGS) values (1, 'XYZ');
insert into STRINGS (ID, STRINGS) values (1, 'ABC');
insert into STRINGS (ID, STRINGS) values (1, 'XYZ~ABC~AAA');
insert into STRINGS (ID, STRINGS) values (1, '123~ABC');

declare @VALUES varchar(max) = 'XYZ~ABC~123';

计算:

代码语言:javascript
复制
select V1.VALUE, count(STRINGS.ID) 
from string_split(@VALUES,'~') V1
     cross join STRINGS
     outer apply string_split(STRINGS.STRINGS,'~') V2
where V2.VALUE = V1.VALUE     
group by V1.VALUE     

结果

代码语言:javascript
复制
-----------
Value Num
-----------
ABC   3
XYZ   2
123   1

活生生的例子:2017&fiddle=15b95efcf69ea98fafbb7dda1c624551

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59749538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档