Sql 为条件选择特定记录

Sql 为条件选择特定记录,sql,oracle11g,Sql,Oracle11g,我在结果中得到2条记录,只想要1条。这是一个测试数据库,其中一个表中有一些不完整的记录,我认为这是导致错误结果的原因 PS\u ASSET\u NBV\u TBL中有多条记录。将来,每个资产应该只有一条记录。我在服务的Months\u上分组,因此我得到的是2行而不是1行 为了在测试数据库中纠正这种情况,我只想选择RUN\u ID='test'的记录。我添加了一个标准来实现这一点(注释如下),但结果中仍有2条记录。我能做这个吗?我的代码中是否有正确的位置 SELECT p.account

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

PS\u ASSET\u NBV\u TBL
中有多条记录。将来,每个资产应该只有一条记录。我在服务的
Months\u上分组
,因此我得到的是2行而不是1行

为了在测试数据库中纠正这种情况,我只想选择
RUN\u 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_资产_NBV_TBL

结果


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';

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

我们怎么知道?您没有显示任何示例输入或结果数据。如果不使用任何行限制,为什么要按内部查询进行分组?我已经添加了导致问题的表taht以及我当前获得的结果。感谢您的帮助……….我是sql新手,正在处理一些其他有效查询的示例。你能再解释一下你的问题吗。谢谢。@Shaves您能给PS_ASSET_NBV_TBL和结果添加列标题吗?Bob………谢谢……我想问题在DeptID字段中。一行有值,另一行为空。这是一个包含大量“坏”数据的测试数据库。
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
select * from ps_asset where asset_id = 0 and business_unit = 'A0056';