我有一个表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
对此有何想法?
除了注释中的建议之外,还可以如下使用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
如果我正确理解了你的情况,下一条话可能会有所帮助:]
文本和表格:
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
设置