SQL Server:需要帮助写我认为应该是简单的代码

问题描述 投票:0回答:2

说我有一张简单的桌子。

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编写表格,但没有接缝。

sql sql-server tsql greatest-n-per-group
2个回答
1
投票

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

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


1
投票

有多种方法可以做到这一点。一种可能的方法是为此使用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
© www.soinside.com 2019 - 2024. All rights reserved.