说我有一张简单的桌子。
id id_fk default
----------------
1 1 T
2 1 F
3 2 F
4 3 F
5 3 T
我想为每个id_fk
返回一行。如果默认值为T
,则返回该值。如果它们不是默认值T
,则返回默认值F
。
看起来似乎很简单,但我一直在努力。
这是我的第一篇帖子,抱歉,如果格式不符合标准。我试图用HTML编写表格,但没有接缝。
一个选项是使用相关子查询进行过滤:
select t.*
from mytable t
where t.id = (
select top(1) t1.id
from mytable t1
where t1.id_fk = t.id_fk
oder by t1.default desc, t1.id
)
这将为每个id_fk
产生一条记录:优先级为'T'
为default
的记录,然后为较小的id
。
有多种方法可以做到这一点。一种可能的方法是为此使用row_number()函数:
select a.*
from
(select x.*,
row_number() over(partition by x.id_fk order by x.Default desc) as rownum1
from table x) a
where a.rownum1=1