Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 稠密秩_Sql Server_Tsql_Null_Dense Rank - Fatal编程技术网

Sql server 稠密秩

Sql server 稠密秩,sql-server,tsql,null,dense-rank,Sql Server,Tsql,Null,Dense Rank,鉴于以下情况 DECLARE @Table TABLE( A INT, B INT, C INT ) INSERT INTO @Table SELECT 1, 1, NULL INSERT INTO @Table SELECT 1, 1, NULL INSERT INTO @Table SELECT 1, 1, 1 INSERT INTO @Table SELECT 1, 1, 2 INSERT INTO @Table SELECT 1, 1,

鉴于以下情况

DECLARE @Table TABLE(
        A INT,
        B INT,
        C INT
)

INSERT INTO @Table SELECT 1, 1, NULL
INSERT INTO @Table SELECT 1, 1, NULL
INSERT INTO @Table SELECT 1, 1, 1
INSERT INTO @Table SELECT 1, 1, 2
INSERT INTO @Table SELECT 1, 1, 2
INSERT INTO @Table SELECT 1, 1, 2
INSERT INTO @Table SELECT 1, 2, 1
INSERT INTO @Table SELECT 1, 2, 2
INSERT INTO @Table SELECT 2, 1, NULL
INSERT INTO @Table SELECT 2, 1, NULL
INSERT INTO @Table SELECT 2, 1, 1
INSERT INTO @Table SELECT 2, 2, 1
INSERT INTO @Table SELECT 2, 2, 1
INSERT INTO @Table SELECT 2, 2, NULL

SELECT A, B, C, DENSE_RANK() OVER (ORDER BY A,B,C DESC) AS rank
FROM @Table
结果是:

A   B   C   rank
1   1   2   1
1   1   2   1
1   1   2   1
1   1   1   2
1   1   NULL    3
1   1   NULL    3
1   2   2   4
1   2   1   5
2   1   1   6
2   1   NULL    7
2   1   NULL    7
2   2   1   8
2   2   1   8
2   2   NULL    9
我希望
11null
21null
的实例是不同的等级。我希望将空值视为未知值,而不是将空值分组在一起

可以接受的答案是

A   B   C   rank
1   1   2   1
1   1   2   1
1   1   2   1
1   1   1   2
1   1   NULL    3
1   1   NULL    4
1   2   2   5
1   2   1   6
2   1   1   7
2   1   NULL    8
2   1   NULL    9
2   2   1   10
2   2   1   10
2   2   NULL    11
我不在乎空值是在开头还是结尾,也就是说。我并不是在给事物排序。我使用
densite\u RANK
作为一种方法,为每个组指定一个唯一的编号


我正在使用SQL server 2014

至少您可以通过添加一个伪列来实现这一点,该伪列在C为null时获取唯一值:

SELECT A, B, C, DENSE_RANK() OVER (ORDER BY A,B,C DESC, dummy) AS rank
FROM (
    select *, case when C is null then row_number() over (order by (select null)) end as dummy
    from @Table
) X

我看到1空=等级3;而2 1空=秩7。这些不是不同的吗?不,稠密的列将空值视为相同的-因此存在问题,但是,如果我们有与现有列相同的新行数值,那么会发生什么,这里是列c