我有一张表格如下:
INSTR_ID PRC_TMS PRC_CURR_CDE PRC_TYP PRC_QUOTE_AMT
5901 31/03/2015 EUR CLO 89.73
5901 31/03/2015 EUR LST 89.53
1123 31/03/2015 USD CLO 12.35
我需要做的是查询选择,但是我有多个INSTR_ID,如果我有CLO PRC_TYP则返回PRC_QUOTE_AMT,否则返回LST PRC_QUOTE_AMT。 / p>
我看过group by,但不确定如何构建逻辑来选择CLO else LST?
有人能指出我正确的方向吗?
答案 0 :(得分:0)
您可以使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by INSTR_ID
order by (case when PRC_TYP = 'CLO' then 1
when PRC_TYPE = 'LST' then 2
else 3
end)
) as seqnum
from table t
) t
where seqnum = 1;
对于您提供的数据,您还可以使用group by
:
select INSTR_ID, PRC_TMS, PRC_CURR_CDE,
coalesce(max(case when PRC_TYP = 'CLO' then PRC_QUOTE_AMT end),
max(PRC_QUOTE_AMT) ) as PRC_QUOTE_AMT
from table t
group by INSTR_ID, PRC_TMS, PRC_CURR_CDE;
答案 1 :(得分:0)
如果CLO返回,如果没有具有相同id和CLO的行,则返回。
select * from tablename t1
where PRC_TYP = 'CLO'
or not exists (select 1 from tablename t2
where t1.INSTR_ID = t2.INSTR_ID
and t2.PRC_TYP = 'CLO')