如果您使用的是 SQL SERVER 2016 以外的版本,则需要创建一个用户定义函数来拆分这些逗号分隔的字符串。
整个答案如下:
Go
CREATE FUNCTION [dbo].StringSplit
(
@Labels varchar(8000)
)
RETURNS @RESULT TABLE(Value VARCHAR(8000))
AS
BEGIN
DECLARE @SeparatorPosition INT = CHARINDEX(',', @Labels ),
@Value VARCHAR(8000), @StartPosition INT = 1
IF @SeparatorPosition = 0
BEGIN
INSERT INTO @RESULT VALUES(@Labels)
RETURN
END
SET @Labels = @Labels + ','
WHILE @SeparatorPosition > 0
BEGIN
SET @Value = SUBSTRING(@Labels , @StartPosition, @SeparatorPosition- @StartPosition)
IF( @Value <> '' )
INSERT INTO @RESULT VALUES(@Value)
SET @StartPosition = @SeparatorPosition + 1
SET @SeparatorPosition = CHARINDEX(',', @Labels , @StartPosition)
END
RETURN
END
Go
创建上述函数后,以下查询应该可以完成工作:
select concat(fn.Value,'(',count(fn.Value),')') as TagCount
from addnew a
cross apply
STRINGSPLIT(a.Labels) as fn
group by fn.Value
order by TagCount;
Working Example
注意:如果您使用的是Sql Server 2016,则可以使用内置函数STRING_SPLIT()。
更多信息click here
SQL SERVER 2016 解决方案:
select concat(fn.Value,'(',count(fn.Value),')') as TagCount
from addnew a
cross apply
STRING_SPLIT(a.Labels) as fn //use in-built function, no need to create UDF
group by fn.Value
order by TagCount;
希望对你有帮助!