【问题标题】:How do I count individual text count from a column from all records [duplicate]如何从所有记录的列中计算单个文本计数[重复]
【发布时间】:2017-10-05 19:10:46
【问题描述】:

我需要显示特定列中所有行上每个文本出现的计数。

查看以下结果:

这里我有一组标签,我需要将每个标签显示为名称'Total'中的列

我所做的是:

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 版本,任务似乎很容易。能否请您添加您的 sql server 的版本?

标签: sql sql-server linq join coalesce


【解决方案1】:

如果您使用的是 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;

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多