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