DB2 构建特别选择

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

我有一张带有多个主键

ID
ANUMBER
的表。

身份证(PK) 数字(PK) 姓名 选项
1 1 A 真实
1 2 真实
1 3 C
2 1 AA 真实

所以我想通过

Select
得到的是

身份证(PK) 数字(PK) 姓名 选项
1 1 A 真实

身份证(PK) 数字(PK) 姓名 选项
1 2 真实

我不知道是否有可能建立这样一个

Select
.

先决条件是

ID
应该相等并且
Option
true
并且返回哪一行并不重要,一行就足够了,这就是为什么我在上面列出了两个有效的结果。

sql db2 greatest-n-per-group db2-luw
2个回答
0
投票

您可以使用

group by
having
子句来做到这一点:

select ID, MAX(ANUMBER) as ANUMBER, MAX(NAME) as NAME, 'true' AS OPTION
from mytable
where OPTION = 'true'
group by ID
having sum(case when OPTION = 'true' then 1 else 0 end) > 1

这里演示


0
投票

您似乎想要 ID 1 的任何行都有一个 true 选项。如果是这样,您可以使用

where
order by
fetch first
:

select *
from mytable t
where id = 1 and option
order by anumber
fetch first 1 row only

查询筛选与给定 id 匹配且具有 true 选项的行。然后

order by
/
fetch
子句保留具有最少
anumber
的行。

如果你想一次对所有

id
获得相同的结果,我们可以引入窗口函数:

select *
from (
    select t.*, row_number() over(partition by id order by anumber) rn 
    from mytable t 
    where option
) t
where rn = 1
order by id
© www.soinside.com 2019 - 2024. All rights reserved.