Transact-SQL计算整个表中所有值的出现的次数

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Transact-SQL计算整个表中所有值的出现的次数相关的知识,希望对你有一定的参考价值。

原文:【Transact-SQL】计算整个表中所有值的出现的次数

一个表有3列,5行,那么一共有15个值,现在要计算整个表中所有值在表中出现的次数,不过这里表的列数是不确定的,上面的例子是3列,实际上也有可能是5列、20列,所以解决问题的步骤是这样的:

1、必须知道有多少列,然后构造动态语句,把这些列合并到一列中。

2、然后去重计算出所有的可能值。

3、最后计算每个值在表中出现了多少次。

 

  1. if(OBJECT_ID(‘dbo.wc‘) is not null)
  2. drop table dbo.wc
  3. go
  4. create table wc
  5. (
  6. a nvarchar(100),
  7. b nvarchar(100),
  8. c nvarchar(100)
  9. )
  10. insert into wc
  11. values(‘1‘,‘2‘,‘3‘),
  12. (‘a‘,‘f‘,‘d‘),
  13. (‘2‘,‘b‘,‘c‘),
  14. (null,‘c‘,‘w‘),
  15. (‘3‘,‘d‘,null)
  16. declare @temp table (cn nvarchar(100));
  17. declare @i int = 1;
  18. declare @v varchar(max)=‘‘;
  19. declare @column varchar(100)=‘‘;
  20. while @i <= (
  21. select count(*)
  22. from sys.tables t
  23. inner join sys.columns c
  24. on t.object_id =c.object_id
  25. where t.name = ‘wc‘
  26. )
  27. begin
  28. select @column = c.name
  29. from sys.tables t
  30. inner join sys.columns c
  31. on t.object_id =c.object_id
  32. where t.name = ‘wc‘
  33. and c.column_id = @i
  34. set @i = @i + 1
  35. set @v = @v + ‘ select ‘+ @column + ‘ from wc union all‘
  36. end
  37. select @v = LEFT(@v,len(@v)-LEN(‘union all‘))
  38. --select @v
  39. insert into @temp
  40. exec (@v)
  41. ;with a
  42. as
  43. (
  44. select cn
  45. from @temp
  46. where cn is not null
  47. group by cn
  48. )
  49. select a.cn,
  50. COUNT(t.cn)
  51. from a
  52. inner join @temp t
  53. on a.cn = t.cn
  54. group by a.cn


 

发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

以上是关于Transact-SQL计算整个表中所有值的出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

计算火花数据框中所有列(300 列)的每个不同值的出现次数

计算python字典中某个值的出现次数?

数据库 分别使用一条Transact-SQL语句完成下来操作拜托各位了 3Q

SQL:计算每个设备集连续出现相同值的所有记录并返回最高计数

SQL:计算每个设备集连续出现相同值的所有记录并返回最高计数:百分比

如何计算某些值在 SQL 表中出现的次数并在列中返回该数字?