T-SQL-返回奇数的稠密_秩
以下密集秩查询返回非常奇怪的输出:T-SQL-返回奇数的稠密_秩,sql,sql-server,tsql,dense-rank,Sql,Sql Server,Tsql,Dense Rank,以下密集秩查询返回非常奇怪的输出: SELECT DENSE_RANK() OVER(PARTITION BY ColC ORDER BY ColB) AS [Rank] FROM ( SELECT *, concat(ColA, CONVERT(DATE, ColB)) AS ColC FROM ##Table ) Subquery1; 返回: ColB ColC Rank 01/11/2017 14:06 Val
SELECT DENSE_RANK() OVER(PARTITION BY ColC ORDER BY ColB) AS [Rank]
FROM
(
SELECT *,
concat(ColA, CONVERT(DATE, ColB)) AS ColC
FROM ##Table
) Subquery1;
返回:
ColB ColC Rank
01/11/2017 14:06 ValueA 3
01/11/2017 16:06 ValueA 5
01/11/2017 16:09 ValueA 6
01/11/2017 16:17 ValueA 7
02/11/2017 12:19 ValueB 2
02/11/2017 16:00 ValueB 5
02/11/2017 16:09 ValueB 6
02/11/2017 16:19 ValueB 7
02/11/2017 16:28 ValueB 8
02/11/2017 16:37 ValueB 9
相对排名似乎是正确的,但分配给每个排名的数字都很奇怪。为什么A值没有数字1、2或4?为什么值B会遗漏数字1、3和4 您没有显示实际的查询,但我非常确定,您的观察结果与此相关:
DECLARE @tbl TABLE(ID INT IDENTITY, RankingValue INT);
INSERT INTO @tbl VALUES (1),(2),(3),(8),(3),(2),(9),(0);
--此查询在排序之前应用WHERE过滤器
SELECT *
,DENSE_RANK() OVER(ORDER BY RankingValue) AS TheRank
FROM @tbl
WHERE RankingValue>3;
--结果
ID RankingValue TheRank
4 8 1
7 9 2
ID RankingValue TheRank
4 8 5 <-- Your weird values... ??
7 9 6
--此查询稍后应用过滤器
WITH cte AS
(
SELECT *
,DENSE_RANK() OVER(ORDER BY RankingValue) AS TheRank
FROM @tbl
)
SELECT *
FROM cte
WHERE RankingValue>3;
--结果
ID RankingValue TheRank
4 8 1
7 9 2
ID RankingValue TheRank
4 8 5 <-- Your weird values... ??
7 9 6
ID RankingValue数据库
4 8 5粘贴的查询不是生成该输出的查询(至少不是确切的输出)。请向我们展示实际查询,以及示例输入数据和当前/预期输出。