假设我有一个包含以下值的表
1
1
1
2
2
2
3
3
3
1
1
1
2
2
2
我需要得到一个这样的输出,它计算 a 的每次出现 特定值
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
1 1
1 2
1 3
2 1
2 2
2 3
注意:这是一个示例表 实际表是一个复杂的表,有很多行和列,查询包含更多条件
最佳答案
如果数字在不同的“岛屿”上重复,那么您需要先计算一个值来维护这些岛屿 (grpnum
)。第一步可以通过从分区行号中减去原始的从上到下的行号 (raw_rownum
) 来进行。该结果为每个“岛”提供了对该岛唯一的引用,然后可用于对后续行号进行分区。由于每个订单可能会干扰结果,我发现有必要使用单独的步骤并传递先前的计算,以便可以重复使用。
MS SQL Server 2014 架构设置:
CREATE TABLE Table1 ([num] int);
INSERT INTO Table1 ([num])
VALUES (1),(1),(1),(2),(2),(2),(3),(3),(3),(1),(1),(1),(2),(2),(2);
查询 1:
select
num
, row_number() over(partition by (grpnum + num) order by raw_rownum) rn
, grpnum + num island_num
from (
select
num
, raw_rownum - row_number() over(partition by num order by raw_rownum) grpnum
, raw_rownum
from (
select
num
, row_number() over(order by (select null)) as raw_rownum
from table1
) r
) d
;
Results :
| num | rn | island_num |
|-----|----|------------|
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
| 2 | 1 | 5 |
| 2 | 2 | 5 |
| 2 | 3 | 5 |
| 1 | 1 | 7 |
| 1 | 2 | 7 |
| 1 | 3 | 7 |
| 3 | 1 | 9 |
| 3 | 2 | 9 |
| 3 | 3 | 9 |
| 2 | 1 | 11 |
| 2 | 2 | 11 |
| 2 | 3 | 11 |
关于sql - 查询以计算特定列值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47217584/