2014-07-15 3 views
0

결과에 2 개의 레코드가 있고 오직 1 개만 필요합니다. 이것은 테스트 데이터베이스이며 잘못된 결과를 초래하는 테이블 중 하나에 불완전한 레코드가 있습니다.기준에 대한 특정 레코드 선택

PS_ASSET_NBV_TBL에는 여러 레코드가 있습니다. 앞으로는 각 자산에 대해 하나의 레코드 만 있어야합니다. Months_In_Service에 그룹화 중이며이 그룹화로 인해 1 대신 2 줄이 표시됩니다.

테스트 데이터베이스에서이 상황을 해결하려면 RUN_ID = 'TEST' 인 레코드 만 선택하고 싶습니다. 이 작업을 수행 할 기준을 추가했지만 (아래에 주석을 달았습니다.) 결과에 2 개의 레코드가 남아 있습니다. 내가 할 수 있을까? 내 코드의 올바른 위치에이 코드가 있습니까? 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 

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 

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 
+2

우리가 알아야 할 것이 있습니까? 샘플 입력 또는 결과 데이터를 표시하지 않습니다. – OldProgrammer

+0

행 제한을 사용하지 않는 이유는 무엇입니까? –

+0

문제점을 일으키는 테이블과 현재 얻는 결과를 추가했습니다. 도움을 주셔서 감사합니다 – Shaves

답변

0

ps_asset 테이블이 자장하게에서 모두 ASSET_ID 및 business_unit에서 하나 이상의 행 정합을 갖는 결과 e 행을 ps_asset_nbv_tbl에서 선택합니다.

결과는 in_service_dt 필드에 두 가지 다른 값을 표시하기 때문에 쉽게 알아볼 수 있습니다.

당신이 자신을 위해 그것을 볼 수있는이 선택 :

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

당신이 당신의 값에 MAX() 나 MIN()를 사용할 수 있습니다 더 중요하다 테이블에있는 행을 결정할 수 있습니다 경우 ps_asset에서 원하지 않는 행을 제외시키기 위해 더 많은 기준을 선택하거나 추가하십시오.

+0

Bob ......... 감사합니다 ...... 문제는 DeptID 필드에 있다고 생각합니다. 한 줄에는 값이 있고 한 줄에는 공백/비어 있습니다.이것은 많은 '나쁜'데이터가있는 테스트 데이터베이스입니다. – Shaves

관련 문제