请问一条sql(多行在某一个字段上的值相同,则根据条件刷选出这多行中的一行)

请教一条sql(多行在某一个字段上的值相同,则根据条件刷选出这多行中的一行)
本帖最后由 sibweo0916 于 2015-01-09 16:18:01 编辑
当发现记录中有多行在某一个字段上的值相同,则根据条件刷选出这多行中的一行
例如表中数据如下
Id      name     age
1         aa         18
2        bb         19
3         aa        20
4         aa        21
5         cc         22
6        dd          23
当发现多行记录的某一个字段相同,即上表中多行的name相同,则根据某个条件刷选出其中一行,例如当名字相同时选择年龄为20岁的(表中最多只出现一个20岁),如果没有20岁的就就选择这些行中年龄最小的

如果name都唯一,则直接查询出原表记录


如上表,最终我要查询出的记录为
Id    name age
3      aa        20
2      bb        19
5      cc         22
6      dd        23

求教这条sql
------解决思路----------------------
SELECT * FROM(
SELECT *,
ROW_NUMBER()OVER(PARTITION BY name ORDER BY
CASE WHEN age=20 THEN 0 ELSE 1 END,age
)RN
FROM TB
)T
WHERE RN=1