如何计算来自所有记录的列中的单个文本计数
问题描述:
我需要显示特定列中所有行上的每个文本出现次数。如何计算来自所有记录的列中的单个文本计数
下面见结果:
我这里有一组标签的,我需要显示计算每个标签作为名称中的“合计”
我所做的是柱:
DECLARE @tags VARCHAR(8000)
DECLARE @tot INT
select @tags = coalesce(@tags + ',' , ' ') + Labels from addNew
select @tot = count(@tags)
select a.Labels as Tags,@tot as Total from addNew a
inner join addNew n
on a.Labels = n.Labels
group by a.Labels
的结果必然是:
查询查询代码:individual_count_set.sql
请推荐您的查询以获得我想要的结果。
感谢提前。
答
如果您使用的是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;
注:如果您使用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服务器的版本? –