如果您使用的是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;
希望它能幫助!
如果您使用的是sql server 2016版本,該任務看起來很簡單。你可以請添加你的SQL服務器的版本? –