小黑日常积累:学习了CROSS APPLY字段,将sqlserver中字段通过分隔符拆分并统计
问题
字段中的元素是通过分隔符进行拼接的,我需要统计元素的个数,例如:
代码
样例表创建
-- 创建样例表
create table #Tmp_Table
(
ID int IDENTITY (1,1) not null,
Strs nvarchar(50),
primary key (ID)
);
insert into #Tmp_Table (Strs) VALUES ('a,b,c,d');
insert into #Tmp_Table (Strs) VALUES ('1,2,3,4');
insert into #Tmp_Table (Strs) VALUES ('8');
通过splitstring函数对每一个字段切分的返回结果
SELECT
*
FROM
SplitString('1,2,3,4', ',')
通过CROSS APPLY,其是SQL Server中的一种JOIN运算符,主要用于连接表值函数或子查询结果集,并将其应用于主表的每一行。
SELECT
t.ID,
s.value AS 'category'
FROM
#Tmp_Table t
CROSS APPLY
STRING_SPLIT(t.[Strs], ',') s
最终代码
SELECT
category, COUNT(category) AS NUM
FROM
(SELECT
t.ID,
s.value AS 'category'
FROM
#Tmp_Table t
CROSS APPLY
STRING_SPLIT(t.[Strs], ',') s) AS a
GROUP BY
category