SQL 服务器:需要帮助编写我认为应该是简单的代码

SQL Server : need help write what i think should be a simple code

我有一个简单的table:

id    id_fk    default
--    -----    -------
 1        1          T
 2        1          F
 3        2          T
 4        3          T
 5        3          F

我想 return 每个 id_fk 一行。如果默认是 T 那么 return 那一个。如果他们没有默认 T 那么 return 默认 F.

看起来很简单,但我一直在努力

一个选项是使用相关子查询进行过滤:

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
SELECT id_fk, MAX(default) As default
FROM SimpleTable
GROUP BY id_fk