我在结果中获得了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
答案 0 :(得分:0)
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_asset中排除不需要的行。