我想为表中的每一行搜索特定的列值。值可以是“A”,“B”或null。如果在任何行中找到值“A”,我想将该值分配给列。如果该值不存在,我想显示现有的列值。
这就是我想要完成的事情。
表
record_id Event_Type
1 A
1 B
1 null
2 B
2 null
3 B
3 A
尝试返回以下结果
record id Event_Type
1 A
2 B
3 A
答案 0 :(得分:1)
通过SQLFiddle:
create table t1 (record_id number, event_type char(1));
insert into t1 values (1, 'A');
insert into t1 values (1, 'B');
insert into t1 values (1, NULL);
insert into t1 values (2, 'B');
insert into t1 values (2, NULL);
insert into t1 values (3, 'A');
insert into t1 values (3, 'B');
SELECT DISTINCT RECORD_ID,
MIN(EVENT_TYPE) OVER (PARTITION BY RECORD_ID ORDER BY EVENT_TYPE NULLS LAST) as event_type
FROM T1
ORDER BY RECORD_ID;
答案 1 :(得分:0)
事实证明,您可以使用min()
:
select recordid, min(Event_Type) as Event_Type
from table t
group by recordid;
但是,这更是巧合。这是一种即使A
不按字母顺序排在第一位的方法,也可以使用
select recordid,
(case when sum(case when Event_Type = 'A' then 1 else 0 end) > 0
then 'A'
else max(Event_Type)
end) as Event_Type
from table t
group by recordid;