2016-10-19 4 views
0

그래서 동일한 인물에 대한 레코드가 여러 개있는 경우 결과 집합에 단일 레코드로 표시해야하며 account_status_value => 'RFND'및 'ACTV'는 ' y '플래그와 총 서비스도 별도의 열에 표시되어야합니다.AJAX QUERY HADOOP

person_id First_nm Last_nm   RFND ACTV RFND_SERVICE ACTV_SERVICE 
000130  aaa ssss.... 'Y' 'Y' 3004   8953

나는 그 그것을 밖으로 작동하지 않는 .. 어떤 생각이를 달성하기 위해 선회를 시도?

+0

fyi : 텍스트의 이미지를 게시하고 결과와 같은 형식의 텍스트까지 게시하는 것은 매우 무례한 것으로 간주됩니다. 또한 솔루션을 테스트하는 데 사용할 데이터 세트를 만들기 위해 다시 입력해야 할 수도 있기 때문에 도움을 받기가 더 어려워집니다. 그러면 어떤 사람들은 더 이상 질문을 읽지 못하게 될 것입니다. Management Studio에는 툴바에 옵션이있어 스택 오버플로에 복사/붙여 넣기하는 텍스트로 결과를 표시합니다. –

답변

1

실제 문제는 사람이 같더라도 계정이 다르다는 것입니다. 결과를 GROUP BY에 포함 시키면 원하는대로 레코드가 멋지게 나오는 것을 방지 할 수 있습니다. 결과 및 GROUP BY에서이를 제거하면 더 잘 작동합니다. 그런 다음 집계 함수와 함께 CASE을 사용하여 결과에 다시 넣을 수 있습니다 ... RFND 또는 ACTV 계정이 두 개 이상인 경우 다음과 같이 끝낼지 확신 할 수 없습니다. :

SELECT SVC.PERSON_ID, SVC.FIRST_NM, SVC.LAST_NM, 
    SUM(SVC.LEGACY_SVC_DAYS) As LEGACY_SVC_DAYS, 
    SUM(ISNULL(ACTUAL_SERVICE_YEARS,0)) * 365 + SUM(ISNULL(ACTUAL_SERVICE_MONTHS,0)) * 30 + SUM(ISNULL(ACTUAL_SERVICE_DAYS,0)) AS TOTAL_SERVICE, 
    CAST((SUM(ISNULL(ACTUAL_SERVICE_YEARS,0)) * 365 + SUM(ISNULL(ACTUAL_SERVICE_MONTHS,0)) * 30 + SUM(ISNULL(ACTUAL_SERVICE_DAYS,0))) AS INT)/365 AS TOTAL_YEARS, 
    (CAST((SUM(ISNULL(ACTUAL_SERVICE_YEARS,0)) * 365 + SUM(ISNULL(ACTUAL_SERVICE_MONTHS,0)) * 30 + SUM(ISNULL(ACTUAL_SERVICE_DAYS,0)))AS INT) % 365)/30 AS TOTAL_MONTHS, 
    ((SUM(ISNULL(ACTUAL_SERVICE_YEARS,0)) * 365 + SUM(ISNULL(ACTUAL_SERVICE_MONTHS,0)) * 30 + SUM(ISNULL(ACTUAL_SERVICE_DAYS,0))) % 365) % 30 AS TOTAL_DAYS, 

    -------- New --------- 
    CASE WHEN MAX(CASE WHEN SPA.ACCOUNT_STATUS_VALUE = 'RFND' THEN SPA.PERSON_ACCOUNT_ID ELSE 0 END) > 0 THEN 'Y' ELSE 'N' END AS RFND, 
    CASE WHEN MAX(CASE WHEN SPA.ACCOUNT_STATUS_VALUE = 'ACTV' THEN SPA.PERSON_ACCOUNT_ID ELSE 0 END) > 0 THEN 'Y' ELSE 'N' END AS ACTV 
    MAX(CASE WHEN SPA.ACCOUNT_STATUS_VALUE = 'RFND' THEN SPA.PERSON_ACCOUNT_ID ELSE 0 END) AS RFND_SERVICE, 
    MAX(CASE WHEN SPA.ACCOUNT_STATUS_VALUE = 'ACTV' THEN SPA.PERSON_ACCOUNT_ID ELSE 0 END) AS ACTV_SERVICE 

FROM RECON_CREDIT_SVC SVC 
INNER JOIN PERSON_ACCOUNT SPA ON SPA.PERSON_ID = SVC.PERSON_ID 
INNER JOIN PA_SERVICE_SUMMARY_BKUP_10152016 PSS ON PSS.PERSON_ACCOUNT_ID = SPA.PERSON_ACCOUNT_ID 

GROUP BY SVC.PERSON_ID, SVC.LEGACY_SVC_DAYS, SVC.FIRST_NM, SVC.LAST_NM 
+0

여기에 RFND_SERVICE에서 person_account_id가 표시됩니다.이 열에 서비스가 필요합니다. – Domnic

+0

상태 (RFND, ACTV)에 따라 TOTAL_MONTHS, TOTAL_YEARS, TOTAL_DAYS를 표시해야합니다. – Domnic

+0

PERSON_ACCOUNT 테이블에 두 번 가입하려고한다고 생각합니다. 한 조인이 RFND 레코드를 가져오고 다른 하나는 ACTV 기록. 어쩌면 당신이 모든 것을 필요로 할 때를위한 세 번째 시간입니다. –