我有一个表格样本有六个名称为
的列 username_s,creation_time,correctiveaction_s,qualitytype_s,mqmsconfigattrkey_s,objectid_s
当我
select username_s ,creation_time,correctiveaction_s,qualitytype_s,atrkey
from sample
where objectid_s='Aa11'
and mqmsconfigattrkey_s='11626018'
;
然后给出我的样本表的前2列输出,becoz的qualitytype_s(R和D)都有相同的atrkey。但我只需要R qualitytype_s输出。如果只有D qualitytype_s为atrkey,如13464430(atrkey),那么我需要D qualitytype_s输出。 如何获得这个价值可以帮助我
username_s creation_time correctiveaction_s qualitytype_s atrkey objectid_s w201fai 30-NOV-2011 09:14:27 AM null D 11626018 Aa11 w201fai 30-NOV-2011 09:14:27 AM Repaired R 11626018 Aa11 w201cairh 30-NOV-2011 09:14:27 AM Repaired R 13460719 Aa11 w201fai 30-NOV-2011 09:14:27 AM null D 13460719 Aa11 w201fai 30-NOV-2011 09:14:27 AM null D 13464430 Aa11
答案 0 :(得分:2)
要清楚你的问题。您有相同分组列的多个记录。如果其中一个记录有QUALITYTYPE_S ='R',那么你想要那个,否则就是列='D'的记录。
所以解决方案将是这样的:
select * from
( select username_s
,creation_time
,correctiveaction_s
,qualitytype_s
,mqmsconfigattrkey_s
,objectid_s
, row_number() over ( partition by objectid_s , mqmsconfigattrkey_s
order by qualitytype_s DESC ) as rn
from your_table )
where RN = 1
/
换句话说,为每组objectid_s , mqmsconfigattrkey_s
选择一条记录。按qualitytype_s
降序排列该组内的记录,因此'R'排在'D'之上。
注意:如果该列可以包含R和D之外的其他值,则需要在内部查询中添加其他WHERE子句。