如何计算来自所有记录的列中的单个文本计数

问题描述:

我需要显示特定列中所有行上的每个文本出现次数。如何计算来自所有记录的列中的单个文本计数

下面

见结果:

enter image description here 我这里有一组标签的,我需要显示计算每个标签作为名称中的“合计”

我所做的是柱:

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 

的结果必然是:

enter image description here
查询查询代码:individual_count_set.sql
请推荐您的查询以获得我想要的结果。

感谢提前。

+0

如果您使用的是sql server 2016版本,该任务看起来很简单。你可以请添加你的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; 

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; 

希望它能帮助!