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
我有一个简单的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