繁体   English   中英

选择特定记录作为条件

[英]select specific record for criteria

我在结果中得到2条记录,但只想要1条。这是一个测试数据库,在其中一张表中有一些不完整的记录,我认为这会导致错误的结果。

PS_ASSET_NBV_TBL有多个记录。 将来,每个资产应该只有1条记录。 我正在对Months_In_Service进行分组,由于此分组是我获得2行而不是1行的原因。

要更正测试数据库中的这种情况,我只想选择RUN_ID = 'TEST'的记录。 我添加了执行此操作的条件(在下面注释),但结果中仍然有2条记录。 我可以这样做吗? 我在代码中的正确位置有此名称吗?

SELECT 
    p.account,
    p.business_unit,
    p.deptid,
    p.asset_id,
    p.descr,
    p.in_service_dt,
    p.Months_In_Service,
    p.cost,
    p.accum_depr,
    p.net_bk_value

FROM (SELECT pant.account,
    pant.business_unit,
    pant.deptid,
    pant.asset_id,
    pant.descr,
    pa.in_service_dt,
    pb.life - pb.life_remaining as Months_In_Service,
    pant.cost,
    pant.accum_depr,
    pant.net_bk_value

  FROM 
    ps_asset_nbv_tbl pant
    inner join ps_asset pa on pa.ASSET_ID = pant.asset_id and pa.business_unit = pant.business_unit
    inner join ps_book pb on pb.ASSET_ID = pant.asset_id and pb.business_unit = pant.business_unit

  WHERE 
    pant.business_unit = 'A0056'
    and pant.book = 'PERFORM'
    and pa.asset_status ='D'
    and pant.run_id = 'TEST'      (-- only added because of the test data)

  GROUP BY
    pant.account,
    pant.business_unit,
    pant.deptid,
    pant.asset_id,
    pant.descr,
    pa.in_service_dt,
    pb.life,
    pb.life_remaining,
    pant.cost,
    pant.accum_depr,
    pant.net_bk_value,
    pant.run_id
    ) p

  GROUP BY
  p.account,
  p.business_unit,
  p.deptid,
  p.asset_id,
  p.descr,
  p.in_service_dt,
  p.Months_In_Service,
  p.cost,
  p.accum_depr,
  p.net_bk_value

PS_ASSET_NBV_TBL

A0056   000000000003    PERFORM 0   E520GM  2   150300

A0056   000000000003    PERFORM 0   E520GM  TEST    150300

A0056   000000000003    PERFORM 0   E520GM  1   150300

结果

150300  A0056       000000000003    Test    01-JAN-14   3   10000   333.34  9666.66

150300  A0056       000000000003    Test    01-JAN-14   4   10000   333.34  9666.66

ps_asset表在您从ps_asset_nbv_tbl中选择的单行中,在asset_id和business_unit上都具有多个匹配的行。

这很容易发现,因为结果在in_service_dt字段中显示两个不同的值。

您可以通过以下选择亲自看到它:

select * from ps_asset where asset_id = 0 and business_unit = 'A0056';

如果您可以决定该表中的哪一行更为重要,则可以在选择的值上使用MAX()或MIN(),或者添加更多条件以从ps_asset中排除不需要的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM