我需要使用我的样本表输出,我在下面给出了说明

时间:2012-02-01 10:13:11

标签: sql oracle

我有一个表格样本有六个名称为

的列

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

1 个答案:

答案 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子句。