sql查询distinct与Row_Number

我在与sql中的distinct关键字战斗。
我只是想在列和列中显示唯一(不同)值的所有行号。所以我试过:

SELECT distinct id, ROW_NUMBER() OVER (ORDER BY  id) AS RowNum
                             FROM table
                             where fid = 64

然而下面的代码给我独特的价值观:

SELECT distinct id FROM table where fid = 64

但是当使用Row_Number。
那么它不工作…
任何帮助将不胜感激
.x

用这个:

SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM
    (SELECT DISTINCT id FROM table WHERE fid = 64) Base

并将查询的“输出”作为另一个的“输入”。

使用CTE:

; WITH Base AS (
    SELECT DISTINCT id FROM table WHERE fid = 64
)

SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM Base

这两个查询应该是等效的。

技术上你可以

SELECT DISTINCT id, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS RowNum 
    FROM table
    WHERE fid = 64

但如果增加DISTINCT字段的数量,则必须将所有这些字段放在PARTITION BY中,例如

SELECT DISTINCT id, description,
    ROW_NUMBER() OVER (PARTITION BY id, description ORDER BY id) AS RowNum 
    FROM table
    WHERE fid = 64

我甚至希望你理解你违反标准命名约定,id应该可能是一个主键,所以唯一的定义,所以一个DISTINCT将是无用的,除非你将查询与一些JOIN / UNION ALL耦合。 。

http://stackoverflow.com/questions/18121130/sql-query-distinct-with-row-number

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql查询distinct与Row_Number