2015-06-24 2 views
0

Я присоединяюсь к таблице предков к запросу, который дает ожидаемые результаты, но в некоторых случаях он возвращает несколько строк на «клиент». Мне нужно вернуть только строку с записью «MAX» из столбца.SQL-n-tier Заявление о присоединении

SELECT  C.FULL_NAME_ALTERNATE || ' (' || C.CLIENT_NUMBER || ')' AS CLIENT, 
      SA.ORGANIZATION_ID         AS SA_ORG, 
      SA.PROGRAM_NAME          AS PROGRAM, 
      CPA.PROCEDURES          AS PROCEDURE, 
      SUM(SA.ACTIVITY_UNIT)        AS USED_UNITS, 
      AP.DEFAULT_PROCEDURE_FEE       AS FEE, 
      (SUM(SA.ACTIVITY_UNIT) * AP.DEFAULT_PROCEDURE_FEE) AS USED_DOLLARS, 
      AP.ORGANIZATION_ID         AS AP_ORG 

FROM  RPT_CLIENT   C 
INNER JOIN RPT_CLIENT_PAYER_AUTH CPA ON C.CLIENT_ID = CPA.CLIENT_ID 
INNER JOIN RPT_SCHEDULED_ACTIVITIES SA ON SA.ACTIVITY_DETAIL_ID = CPA.ACTIVITY_DETAIL_ID 
INNER JOIN RPT_ORGANIZATION_RELATIVE R ON R.DESCENDANT_ORG_ID = CPA.ORGANIZATION_ID 
INNER JOIN RPT_ADMIN_PROCEDURE  AP ON CPA.PROCEDURES = AP.PROCEDURE_CODE               
            AND (AP.END_DATE > CURRENT_DATE OR AP.END_DATE IS NULL) 
            AND AP.ORGANIZATION_ID = R.ANCESTOR_ORG_ID 

GROUP BY C.FULL_NAME_ALTERNATE || ' (' || C.CLIENT_NUMBER || ')', 
      SA.ORGANIZATION_ID, 
      SA.PROGRAM_NAME, 
      CPA.PROCEDURES, 
      AP.DEFAULT_PROCEDURE_FEE, 
      AP.ORGANIZATION_ID 

Это возвращает что-то вроде следующего:

CL ID PROG PROC UNIT DOLLARS  FEE SA_ID 
Bob 1029 ACH W7075 4069 37272.04 9.16 1029 
Bob 1142 RCH W6099 344  5149.68  14.97 1142 
Bob 1142 RCH W6099 344  5772.32  16.78 1137 
Jen 1029 ACH W7074 3898 17541  4.5  1029 
Jen 1024 BEH W7095 55  1068.1  19.42 1024 
Jen 1142 RES W6099 343  5134.71  14.97 1142 
Jen 1142 RES W6099 343  5755.54  16.78 1137 
Dave 1186 RES W6098 350  64004.5  182.87 1137 
Dave 1186 RES W6098 350  64004.5  182.87 1186 
Dave 1186 RES W6099 350  5873  16.78 1137 
Dave 1186 RES W6099 350  5873  16.78 1186 

Мне нужно возвращать только 1 строку для каждого клиента, ID, программы и процедуры. Когда есть кратные числа, необходимо использовать строку с max (sa_id).
* Параметры sa_id и id не всегда совпадают, но когда они это делают, они должны быть выбраны.


+0

Является 'sa_id' уникального столбца, или существует несколько записей с тем же 'sa_id' для одного и того же клиента? Образцы данных для примера вывода, которые вы дали, были бы полезными. :) –

+0

Имена столбцов в этом примере не совпадают с выбранными вами запросами столбца int eh. –

ответ

0

Ключа добавить заявление, которое отфильтровывает са запись, которые не являются максимальными са записи для вашей присоединиться к статье следующим образом:

SELECT  C.FULL_NAME_ALTERNATE || ' (' || C.CLIENT_NUMBER || ')' AS CLIENT, 
      SA.ORGANIZATION_ID         AS SA_ORG, 
      SA.PROGRAM_NAME          AS PROGRAM, 
      CPA.PROCEDURES          AS PROCEDURE, 
      SUM(SA.ACTIVITY_UNIT)        AS USED_UNITS, 
      AP.DEFAULT_PROCEDURE_FEE       AS FEE, 
      (SUM(SA.ACTIVITY_UNIT) * AP.DEFAULT_PROCEDURE_FEE) AS USED_DOLLARS, 
      AP.ORGANIZATION_ID         AS AP_ORG 

FROM  RPT_CLIENT   C 
INNER JOIN RPT_CLIENT_PAYER_AUTH CPA ON C.CLIENT_ID = CPA.CLIENT_ID 
INNER JOIN RPT_SCHEDULED_ACTIVITIES SA ON SA.ACTIVITY_DETAIL_ID = CPA.ACTIVITY_DETAIL_ID 
INNER JOIN RPT_ORGANIZATION_RELATIVE R ON R.DESCENDANT_ORG_ID = CPA.ORGANIZATION_ID 
INNER JOIN RPT_ADMIN_PROCEDURE  AP ON CPA.PROCEDURES = AP.PROCEDURE_CODE               
            AND (AP.END_DATE > CURRENT_DATE OR AP.END_DATE IS NULL) 
            AND AP.ORGANIZATION_ID = R.ANCESTOR_ORG_ID 
and sa_id = (select max(sa_id) from RPT_SCHEDULED_ACTIVITIES x where x.ACTIVITY_DETAIL_ID = CPA.ACTIVITY_DETAIL_ID) 

GROUP BY C.FULL_NAME_ALTERNATE || ' (' || C.CLIENT_NUMBER || ')', 
      SA.ORGANIZATION_ID, 
      SA.PROGRAM_NAME, 
      CPA.PROCEDURES, 
      AP.DEFAULT_PROCEDURE_FEE, 
      AP.ORGANIZATION_ID 
Смежные вопросы