2

我用来为每个组内DENSE_RANK的不同值分配一个序号。它添加了一个新列。[y][x][rank]

我还想要一个新列,显示每个eg中的最大排名[y](最高序列号)。有没有办法同时获得这个新列,而不必为最大值创建一个单独的表,然后将这些表连接在一起?[x][highest_rank]

SELECT [x],[y],[rank]
INTO table2
FROM
(
SELECT *, DENSE_RANK() OVER (PARTITION BY [x] ORDER BY [y] ) AS [rank]
FROM table1
) tmp
4

1 回答 1

1

如果我理解正确,您正在寻找这样的东西:

;WITH cte1 AS (
    SELECT *,DENSE_RANK() OVER (PARTITION BY [x] ORDER BY [y] ) AS [rank]
    FROM table1 
),
cte2 AS (
    SELECT [x], [highest_rank]=MAX([rank])
    FROM cte1
    GROUP BY [x]
)
SELECT cte1.[x],cte1.[y],cte1.[rank],cte2.[highest_rank]
FROM cte1 INNER JOIN cte2 ON cte2.[x]=cte1.[x];
于 2016-02-11T12:49:20.617 回答