如何在oracle中编写单个查询而不是使用循环?

时间:2013-11-08 06:26:02

标签: sql oracle11g

我想基于某些条件编写查询,如下所示。在这方面你能帮帮我吗?

RecordID          MergeRecordID   Status          StatusTime
3700432           289015          Invoiced        25-May-09
3700433           289015          Invoiced        25-May-09
3700434           289015          Invoiced        08-Dec-09
3700435           289015          Error           08-Dec-09

我有一个名为billingValues_tbl的表,其中RecordID是主键。请注意,MergeRecordID包含多个记录ID。

第1步:我想基于MergeRecordID进行排序。在上面的例子中,我们将得到4条记录。

步骤2:所有记录都应具有状态Invoiced。如果Stattus列中的值不是'Invoiced',我应该跳过该mergerecordid,即我不应该考虑这个记录。然后我会去另一个mergerecordid / recordids组合。我写了如下所示的查询,但它没有给我想要的结果。

 SELECT RECORDID,MERGERECORDID,STATUS,STATUSTIME

 FROM BE242.BILLINGVALUES_TBL BV1

 WHERE BV1.MERGERECORDID IN ( SELECT BV2.MERGERECORDID

                                  FROM BILLINGVALUES_TBL BV2

                                  WHERE BV2.RECORDID = BV1.RECORDID

                                    AND BV2.MERGERECORDID = BV1.MERGERECORDID

                                    AND BV2.STATUS IN ('Invoiced', 'Cancelled') )

 ORDER BY BV1.MERGERECORDID  DESC;

请有人尽快帮助我吗?

1 个答案:

答案 0 :(得分:0)

对我来说,看起来你选择了两次表,尽管在这种情况下没有必要。

如果您只想拥有Status等于Invoiced或Cancelled的所有记录,而不是简单的

 SELECT RECORDID,MERGERECORDID,STATUS,STATUSTIME
   from BILLINGVALUES_TBL
  where STATUS IN ('Invoiced', 'Cancelled')

应该这样做。

否则,尝试不仅在内部选择中检查状态,还要在周围的选择中检查它。