AJAX 查询 HADOOP

AJAX QUERY HADOOP

因此,如果同一个人存在多个记录,我需要在结果集中将它们显示为单个记录,并且 account_status_value => 'RFND' 和 'ACTV' 应显示为该单条记录中带有 'y' 标志的列及其总服务也应显示在单独的列中。

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

我试过 pivot 它没有解决..有什么实现这个的想法吗?

这里真正的问题是即使是同一个人,账号也是不同的。将其包含在结果和 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