AJAX ЗАПРОС HADOOP

#sql #sql-server-2008 #sql-server-2005

#sql #sql-server-2008 #sql-сервер-2005

Вопрос:

Поэтому, если существует более одной записи для одного и того же пользователя, мне нужно показать их как одну запись в наборе результатов, и 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

Я пробовал сводить, но это не сработало .. есть идеи для достижения этого?

Комментарии:

1. к вашему сведению: здесь считается очень грубым публиковать текстовые изображения, даже форматированный текст, подобный вашим результатам. Это также затрудняет получение справки, потому что теперь нам, возможно, придется повторно ввести это для создания набора данных, который будет использоваться для тестирования наших решений. Это удержит некоторых людей даже от дальнейшего изучения вопроса. У Management Studio есть опция на панели инструментов для представления результатов в виде текста, который вы копируете / вставляете в Stack Overflow.

Ответ №1:

Реальная проблема здесь в том, что даже если пользователь тот же, учетная запись отличается. Включение этого в результаты и в ГРУППУ 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
  

Комментарии:

1. Здесь, в RFND_SERVICE, отображается person_account_id . Нам нужен сервис для этого столбца.

2. Мне нужно отобразить TOTAL_MONTHS, TOTAL_YEARS, TOTAL_DAYS в соответствии со статусом (RFND, ACTV)

3. Я начинаю думать, что вы хотите присоединиться к таблице PERSON_ACCOUNT дважды… одно соединение извлекает записи RFND, а другое извлекает записи ACTV. Может быть, даже в третий раз, когда вам нужны суммы всего.