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

时间:2022-04-26 08:01:46

原文: 【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


 

【Transact-SQL】计算整个表中所有值的出现的次数【Transact-SQL】计算整个表中所有值的出现的次数 不想长大啊 发布了416 篇原创文章 · 获赞 135 · 访问量 94万 他的留言板 关注