SQL Server计数数字

时间:2018-07-11 02:28:06

标签: sql sql-server

我有一张桌子,它看起来像这样:

Num1 num2  num3
----------------
1     2     2<----- grouped numbers

1     2     3<----- another group 
1     2     3<----- same numbers so I have a value of 2 

2     4     4
2     2     3
2     4     3
3
3
4

我想知道如何给数字组,一个数字值。

Example1

1、2、2被水平分组

示例2

1,2,2这个组合显示x次数

1,2,2次= 1

示例3

1,2,3 = 2次

2,3,3 = 4次

这有效,但仅适用于单个数字

select num, count(*)Times
from Numbers cross apply
     (values (F2), (F3), (F4),(F5),(F6),(F7),(F8)) v(num)
where num is not null
group by num
order by num;


This also works but same problem 

select value, count(*)
from Numbers
unpivot
(
  value
  for col in (F2, F3, F4,F5,F6,F7,F8,F9)
) u
group by value 
ORDER BY 1;

想法是将其扩展到16列,并搜索所有行以找到匹配的内容 每行中的数字集。 给出示例3的输出,“ times”为列名

行数= 2000,列= 16

如果有人可以提供帮助,请发布

1 个答案:

答案 0 :(得分:1)

哦,我想您要对每个数字进行计数。您可以通过取消透视和汇总来做到这一点:

select num, count(*)
from t cross apply
     (values (num1), (num2), (num3)) v(num)
where num is not null
group by num
order by num;