我正在与中的unique关键字作斗争sql
。我只想distinct
在列&中显示唯一()值的所有行号,所以我尝试了:
SELECT distinct id, ROW_NUMBER() OVER (ORDER BY id) AS RowNum
FROM table
where fid = 64
但是下面的代码给了我这些distinct
值:
SELECT distinct id FROM table where fid = 64
但是当尝试使用Row_Number
。
那就行不通了。
用这个:
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
s /耦合在一起UNION ALL
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句