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粘贴的查询不是生成该输出的查询(至少不是确切的输出)。请向我们展示实际查询,以及示例输入数据和当前/预期输出。