鉴于以下内容
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
我希望1 1 NULL
和2 1 NULL
的实例成为不同的排名。我希望将NULL视为未知值,而不是将空值组合在一起。
可接受的答案可能是
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
我不在乎空值是在开头还是结尾,也就是说。我实际上并没有排名。我使用DENSE_RANK
作为为每个组提供唯一编号的方法。
我正在使用SQL Server 2014
答案 0 :(得分:2)
至少你可以通过添加一个在C为空时获取唯一值的虚拟列来这样做:
<td>@string.Format("{0:C}", t.Cost)</td>