2011-01-28 25 views
1

更新2011年1月31日甲骨文MAX()的臭蟲以NULL值CBO指數修正導致指數限制

我想我競選對手一個DB限制。的GROUP BY表達
和所有nondistinct集合函數可能已超出單個
數據庫塊。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/limits003.htm

原帖:

這是Oracle數據庫10g企業版發佈10.2.0.1.0 - PROD。

下插入不返回真正的MAX()值
如果我有兩個記錄中,其中matchKey是一樣的,一個
與contributionP NULL值,另外一非NULL值。
有時,MAX()返回的值是NULL值。

INSERT /*+ APPEND */ INTO meCostingXPrePre( 
    matchKey     , 
    contributionP    , 
    stimulusContributionP  , 
    contributionC    , 
    ageMultiplier    , 
    rateTableIdP    , 
    rateTableIdC    , 
    accountNbrP     , 
    accountNbrC     , 
    commissionExpenseAccount , 
    commissionReceivableAccount , 
    commissionType    , 
    commission     , 
    pmPm      , 
    fee       , 
    planAgeGroupIdP    , 
    planAgeGroupIdC    , 
    rafP      , 
    rafC      , 
    nbrEmployeesRafP   , 
    nbrEmployeesRafC   , 
    contractId     , 
    basePlanId     , 
    groupOrPolicyNumber   , 
    planCoverageDescription  , 
    cobraGopn     , 
    cobraPcd     , 
    cobraCid     , 
    benefitId     , 
    insuranceStart    , 
    insuranceEnd    , 
    categoryId     ) 
    SELECT 
     matchKey                 as matchKey     , 
     MAX(NVL(contributionP    ,0))         as contributionP    , 
     MAX(NVL(stimulusContributionP  ,0))         as stimulusContributionP  , 
     MAX(NVL(contributionC    ,0))         as contributionC    , 
     MAX(NVL(ageMultiplier    ,0))         as ageMultiplier    , 
     MAX(NVL(rateTableIdP    ,0))         as rateTableIdP    , 
     MAX(NVL(rateTableIdC    ,0))         as rateTableIdC    , 
     MAX(NVL(accountNbrP     ,0))         as accountNbrP     , 
     MAX(NVL(accountNbrC     ,0))         as accountNbrC     , 
     MAX(NVL(commissionExpenseAccount ,0))         as commissionExpenseAccount , 
     MAX(NVL(commissionReceivableAccount ,0))         as commissionReceivableAccount , 
     MAX(NVL(commissionType    ,0))         as commissionType    , 
     MAX(NVL(commission     ,0))         as commission     , 
     MAX(NVL(pmPm      ,0))         as pmPm      , 
     MAX(NVL(fee       ,0))         as fee       , 
     MAX(NVL(planAgeGroupIdP    ,0))         as planAgeGroupIdP    , 
     MAX(NVL(planAgeGroupIdC    ,0))         as planAgeGroupIdC    , 
     MAX(NVL(rafP      ,0))         as rafP      , 
     MAX(NVL(rafC      ,0))         as rafC      , 
     MAX(NVL(nbrEmployeesRafP   ,0))         as nbrEmployeesRafP   , 
     MAX(NVL(nbrEmployeesRafC   ,0))         as nbrEmployeesRafC   , 
     CASE WHEN MAX(contractId) IS NOT NULL AND 
       MIN(contractId) IS NOT NULL AND 
       MAX(contractId) != MIN(contractId) THEN 
     CASE WHEN MAX(contractId) = 'No Contract No' THEN 
      MIN(contractId) 
     WHEN MIN(contractId) = 'No Contract No' THEN 
      MAX(contractId) 
     ELSE 
      MAX(contractId) 
     END 
     ELSE 
     MAX(contractId) 
     END                   as contractId     , 
     MAX(NVL(basePlanId     ,0))         as basePlanId     , 
     CASE WHEN MAX(groupOrPolicyNumber) IS NOT NULL AND 
       MIN(groupOrPolicyNumber) IS NOT NULL AND 
       MAX(groupOrPolicyNumber) != MIN(groupOrPolicyNumber) THEN 
     CASE WHEN MAX(groupOrPolicyNumber) = 'No Contract No' THEN 
      MIN(groupOrPolicyNumber) 
     WHEN MIN(groupOrPolicyNumber) = 'No Contract No' THEN 
      MAX(groupOrPolicyNumber) 
     ELSE 
      MAX(groupOrPolicyNumber) 
     END 
     ELSE 
     MAX(groupOrPolicyNumber) 
     END                   as groupOrPolicyNumber   , 
     CASE WHEN MAX(planCoverageDescription) IS NOT NULL AND 
       MIN(planCoverageDescription) IS NOT NULL AND 
       MAX(planCoverageDescription) != MIN(planCoverageDescription) THEN 
     CASE WHEN MAX(planCoverageDescription) = 'No Contract No' THEN 
      MIN(planCoverageDescription) 
     WHEN MIN(planCoverageDescription) = 'No Contract No' THEN 
      MAX(planCoverageDescription) 
     ELSE 
      MAX(planCoverageDescription) 
     END 
     ELSE 
     MAX(planCoverageDescription) 
     END                   as planCoverageDescription  , 
     CASE WHEN MAX(cobraGopn) IS NOT NULL AND 
       MIN(cobraGopn) IS NOT NULL AND 
       MAX(cobraGopn) != MIN(cobraGopn) THEN 
     CASE WHEN MAX(cobraGopn) = 'No Contract No' THEN 
      MIN(cobraGopn) 
     WHEN MIN(cobraGopn) = 'No Contract No' THEN 
      MAX(cobraGopn) 
     ELSE 
      MAX(cobraGopn) 
     END 
     ELSE 
     MAX(cobraGopn) 
     END                   as cobraGopn     , 
     CASE WHEN MAX(cobraPcd) IS NOT NULL AND 
       MIN(cobraPcd) IS NOT NULL AND 
       MAX(cobraPcd) != MIN(cobraPcd) THEN 
     CASE WHEN MAX(cobraPcd) = 'No Contract No' THEN 
      MIN(cobraPcd) 
     WHEN MIN(cobraPcd) = 'No Contract No' THEN 
      MAX(cobraPcd) 
     ELSE 
      MAX(cobraPcd) 
     END 
     ELSE 
     MAX(cobraPcd) 
     END                   as cobraPcd     , 
     CASE WHEN MAX(cobraCid) IS NOT NULL AND 
       MIN(cobraCid) IS NOT NULL AND 
       MAX(cobraCid) != MIN(cobraCid) THEN 
     CASE WHEN MAX(cobraCid) = 'No Contract No' THEN 
      MIN(cobraCid) 
     WHEN MIN(cobraCid) = 'No Contract No' THEN 
      MAX(cobraCid) 
     ELSE 
      MAX(cobraCid) 
     END 
     ELSE 
     MAX(cobraCid) 
     END                   as cobraCid     , 
     MAX(benefitId       )         as benefitId     , 
     NULL                  as insuranceStart    , 
     NULL                  as insuranceEnd    , 
     NULL                  as categoryId      
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 

如果我建一個指標如下,並給予CBO提示

CREATE INDEX C$MECOSTINGXPREPREPRE$MULTI0 ON MECOSTINGXPREPREPRE 
(MATCHKEY, CONTRIBUTIONP, STIMULUSCONTRIBUTIONP, CONTRIBUTIONC, AGEMULTIPLIER, 
RATETABLEIDP, RATETABLEIDC, ACCOUNTNBRP, ACCOUNTNBRC, COMMISSIONEXPENSEACCOUNT, 
COMMISSIONRECEIVABLEACCOUNT, COMMISSIONTYPE, COMMISSION, PMPM, FEE, 
PLANAGEGROUPIDP, PLANAGEGROUPIDC, RAFP, RAFC, 
NBREMPLOYEESRAFP, NBREMPLOYEESRAFC, CONTRACTID, BASEPLANID, GROUPORPOLICYNUMBER, 
PLANCOVERAGEDESCRIPTION, COBRAGOPN, COBRAPCD, COBRACID, BENEFITID) 
NOLOGGING 
TABLESPACE INDX 
NOPARALLEL; 

INSERT /*+ APPEND */ INTO meCostingXPrePre(
    ...) 
    SELECT /*+ INDEX(meCostingXPrePrePre c$mecostingxpreprepre$multi0) */ 
     ... 
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 

這得到MAX()到正常運行。

我需要添加15多列,並更改索引

小問題

CREATE INDEX C$MECOSTINGXPREPREPRE$MULTI0 ON MECOSTINGXPREPREPRE 
(MATCHKEY, CONTRIBUTIONP, STIMULUSCONTRIBUTIONP, CONTRIBUTIONC, AGEMULTIPLIER, 
RATETABLEIDP, RATETABLEIDC, ACCOUNTNBRP, ACCOUNTNBRC, COMMISSIONEXPENSEACCOUNT, 
COMMISSIONRECEIVABLEACCOUNT, COMMISSIONTYPE, COMMISSION, PMPM, FEE, 
PLANAGEGROUPIDP, PLANAGEGROUPIDC, ADDRESSONEP, ADDRESSONEC, ADDRESSTWOP, 
ADDRESSTWOC, CITYP, CITYC, STATEP, STATEC, ZIPFULLP, ZIPFULLC, RAFP, RAFC, 
NBREMPLOYEESRAFP, NBREMPLOYEESRAFC, CONTRACTID, BASEPLANID, GROUPORPOLICYNUMBER, 
PLANCOVERAGEDESCRIPTION, COBRAGOPN, COBRAPCD, COBRACID, BENEFITID) 
NOLOGGING 
TABLESPACE INDX 
NOPARALLEL; 


ORA-01793:索引列的最大數量爲32

首先MAX()不與大列集和第二工作,該指數+ CBO修補
導致指數的限制。

有什麼建議嗎?

+3

「我需要添加額外的15列」 - 這些話應該幾乎內華達州...沒有。 ..不說話。如果您將* 15個列添加到已經在使用的表格*,那麼您的設計存在問題。如果你有15列*,你應該考慮看看你可以在哪裏歸一化。 – 2011-01-28 19:12:09

+2

MAX(NVL(cobraPcd,''))應該做什麼?在Oracle中,''與NULL相同,因此NVL(cobraPcd,'')與_cobraPcd_相同。無論如何,MAX都處理NULL值。 – Codo 2011-01-28 19:40:43

+0

Metalink上列出了這個錯誤嗎?你能想出一個簡單的*(意思是沒有那麼多列)測試用例來重現它嗎? – Dan 2011-01-28 19:49:08

回答

0

OK,可以在半分割工作將得到我我需要什麼:

INSERT /*+ APPEND */ INTO meCostingXPrePreFirstHalf( 
    matchKey     , 
    contributionP    , 
    stimulusContributionP  , 
    contributionC    , 
    ageMultiplier    , 
    rateTableIdP    , 
    rateTableIdC    , 
    accountNbrP     , 
    accountNbrC     , 
    commissionExpenseAccount , 
    commissionReceivableAccount , 
    commissionType    , 
    commission     , 
    pmPm      , 
    fee       , 
    planAgeGroupIdP    , 
    planAgeGroupIdC   ) 
    SELECT 
     matchKey         as matchKey     , 
     MAX(NVL(contributionP    ,0)) as contributionP    , 
     MAX(NVL(stimulusContributionP  ,0)) as stimulusContributionP  , 
     MAX(NVL(contributionC    ,0)) as contributionC    , 
     MAX(NVL(ageMultiplier    ,0)) as ageMultiplier    , 
     MAX(NVL(rateTableIdP    ,0)) as rateTableIdP    , 
     MAX(NVL(rateTableIdC    ,0)) as rateTableIdC    , 
     MAX(NVL(accountNbrP     ,0)) as accountNbrP     , 
     MAX(NVL(accountNbrC     ,0)) as accountNbrC     , 
     MAX(NVL(commissionExpenseAccount ,0)) as commissionExpenseAccount , 
     MAX(NVL(commissionReceivableAccount ,0)) as commissionReceivableAccount , 
     MAX(NVL(commissionType    ,0)) as commissionType    , 
     MAX(NVL(commission     ,0)) as commission     , 
     MAX(NVL(pmPm      ,0)) as pmPm      , 
     MAX(NVL(fee       ,0)) as fee       , 
     MAX(NVL(planAgeGroupIdP    ,0)) as planAgeGroupIdP    , 
     MAX(NVL(planAgeGroupIdC    ,0)) as planAgeGroupIdC     
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 
/* No commit yet. */ 

INSERT /*+ APPEND */ INTO meCostingXPrePreOtherHalf( 
    matchKey     , 
    rafP      , 
    rafC      , 
    nbrEmployeesRafP   , 
    nbrEmployeesRafC   , 
    contractId     , 
    basePlanId     , 
    groupOrPolicyNumber   , 
    planCoverageDescription  , 
    cobraGopn     , 
    cobraPcd     , 
    cobraCid     , 
    benefitId     , 
    insuranceStart    , 
    insuranceEnd    , 
    categoryId     ) 
    SELECT 
     matchKey                 as matchKey     , 
     MAX(NVL(rafP      ,0))         as rafP      , 
     MAX(NVL(rafC      ,0))         as rafC      , 
     MAX(NVL(nbrEmployeesRafP   ,0))         as nbrEmployeesRafP   , 
     MAX(NVL(nbrEmployeesRafC   ,0))         as nbrEmployeesRafC   , 
     CASE WHEN MAX(contractId) IS NOT NULL AND 
       MIN(contractId) IS NOT NULL AND 
       MAX(contractId) != MIN(contractId) THEN 
     CASE WHEN MAX(contractId) = 'No Contract No' THEN 
      MIN(contractId) 
     WHEN MIN(contractId) = 'No Contract No' THEN 
      MAX(contractId) 
     ELSE 
      MAX(contractId) 
     END 
     ELSE 
     MAX(contractId) 
     END                   as contractId     , 
     MAX(NVL(basePlanId     ,0))         as basePlanId     , 
     CASE WHEN MAX(groupOrPolicyNumber) IS NOT NULL AND 
       MIN(groupOrPolicyNumber) IS NOT NULL AND 
       MAX(groupOrPolicyNumber) != MIN(groupOrPolicyNumber) THEN 
     CASE WHEN MAX(groupOrPolicyNumber) = 'No Contract No' THEN 
      MIN(groupOrPolicyNumber) 
     WHEN MIN(groupOrPolicyNumber) = 'No Contract No' THEN 
      MAX(groupOrPolicyNumber) 
     ELSE 
      MAX(groupOrPolicyNumber) 
     END 
     ELSE 
     MAX(groupOrPolicyNumber) 
     END                   as groupOrPolicyNumber   , 
     CASE WHEN MAX(planCoverageDescription) IS NOT NULL AND 
       MIN(planCoverageDescription) IS NOT NULL AND 
       MAX(planCoverageDescription) != MIN(planCoverageDescription) THEN 
     CASE WHEN MAX(planCoverageDescription) = 'No Contract No' THEN 
      MIN(planCoverageDescription) 
     WHEN MIN(planCoverageDescription) = 'No Contract No' THEN 
      MAX(planCoverageDescription) 
     ELSE 
      MAX(planCoverageDescription) 
     END 
     ELSE 
     MAX(planCoverageDescription) 
     END                   as planCoverageDescription  , 
     CASE WHEN MAX(cobraGopn) IS NOT NULL AND 
       MIN(cobraGopn) IS NOT NULL AND 
       MAX(cobraGopn) != MIN(cobraGopn) THEN 
     CASE WHEN MAX(cobraGopn) = 'No Contract No' THEN 
      MIN(cobraGopn) 
     WHEN MIN(cobraGopn) = 'No Contract No' THEN 
      MAX(cobraGopn) 
     ELSE 
      MAX(cobraGopn) 
     END 
     ELSE 
     MAX(cobraGopn) 
     END                   as cobraGopn     , 
     CASE WHEN MAX(cobraPcd) IS NOT NULL AND 
       MIN(cobraPcd) IS NOT NULL AND 
       MAX(cobraPcd) != MIN(cobraPcd) THEN 
     CASE WHEN MAX(cobraPcd) = 'No Contract No' THEN 
      MIN(cobraPcd) 
     WHEN MIN(cobraPcd) = 'No Contract No' THEN 
      MAX(cobraPcd) 
     ELSE 
      MAX(cobraPcd) 
     END 
     ELSE 
     MAX(cobraPcd) 
     END                   as cobraPcd     , 
     CASE WHEN MAX(cobraCid) IS NOT NULL AND 
       MIN(cobraCid) IS NOT NULL AND 
       MAX(cobraCid) != MIN(cobraCid) THEN 
     CASE WHEN MAX(cobraCid) = 'No Contract No' THEN 
      MIN(cobraCid) 
     WHEN MIN(cobraCid) = 'No Contract No' THEN 
      MAX(cobraCid) 
     ELSE 
      MAX(cobraCid) 
     END 
     ELSE 
     MAX(cobraCid) 
     END                   as cobraCid     , 
     MAX(benefitId       )         as benefitId      
    FROM meCostingXPrePrePre 
    GROUP BY matchKey; 
/* No commit yet. */ 

INSERT /*+ APPEND */ INTO meCostingXPrePre( 
    matchKey     , 
    contributionP    , 
    stimulusContributionP  , 
    contributionC    , 
    ageMultiplier    , 
    rateTableIdP    , 
    rateTableIdC    , 
    accountNbrP     , 
    accountNbrC     , 
    commissionExpenseAccount , 
    commissionReceivableAccount , 
    commissionType    , 
    commission     , 
    pmPm      , 
    fee       , 
    planAgeGroupIdP    , 
    planAgeGroupIdC    , 
    rafP      , 
    rafC      , 
    nbrEmployeesRafP   , 
    nbrEmployeesRafC   , 
    contractId     , 
    basePlanId     , 
    groupOrPolicyNumber   , 
    planCoverageDescription  , 
    cobraGopn     , 
    cobraPcd     , 
    cobraCid     , 
    benefitId     , 
    insuranceStart    , 
    insuranceEnd    , 
    categoryId     ) 
    SELECT 
     f.matchKey     as matchKey     , 
     f.contributionP    as contributionP    , 
     f.stimulusContributionP  as stimulusContributionP  , 
     f.contributionC    as contributionC    , 
     f.ageMultiplier    as ageMultiplier    , 
     f.rateTableIdP    as rateTableIdP    , 
     f.rateTableIdC    as rateTableIdC    , 
     f.accountNbrP     as accountNbrP     , 
     f.accountNbrC     as accountNbrC     , 
     f.commissionExpenseAccount as commissionExpenseAccount , 
     f.commissionReceivableAccount as commissionReceivableAccount , 
     f.commissionType    as commissionType    , 
     f.commission     as commission     , 
     f.pmPm      as pmPm      , 
     f.fee       as fee       , 
     f.planAgeGroupIdP    as planAgeGroupIdP    , 
     f.planAgeGroupIdC    as planAgeGroupIdC    , 
     o.rafP      as rafP      , 
     o.rafC      as rafC      , 
     o.nbrEmployeesRafP   as nbrEmployeesRafP   , 
     o.nbrEmployeesRafC   as nbrEmployeesRafC   , 
     o.contractId     as contractId     , 
     o.basePlanId     as basePlanId     , 
     o.groupOrPolicyNumber   as groupOrPolicyNumber   , 
     o.planCoverageDescription  as planCoverageDescription  , 
     o.cobraGopn     as cobraGopn     , 
     o.cobraPcd     as cobraPcd     , 
     o.cobraCid     as cobraCid     , 
     o.benefitId     as benefitId     , 
     o.insuranceStart    as insuranceStart    , 
     o.insuranceEnd    as insuranceEnd    , 
     o.categoryId     as categoryId     , 
     NULL       as insuranceStart    , 
     NULL       as insuranceEnd    , 
     NULL       as categoryId      
    FROM 
     meCostingXPrePreFirstHalf f 
     INNER JOIN meCostingXPrePreOtherHalf o 
     ON f.matchKey = o.matchKey; 
/* Now it is safe to commit. */ 
COMMIT; 
2

如果你得到不正確的結果,這顯然是一個Oracle錯誤。您是否使用Oracle支持記錄了支持請求和/或確定了您正在訪問的錯誤(我猜這是解決方法的來源)?

如果使用的是10.2.0.1,你嘗試應用最新的補丁集(最有可能的10.2.0.4)?最初的10.2版本和終端10.2版本之間有一些錯誤修復。如果這是Oracle修復的錯誤,那麼可能還會有一次性修補程序,但該修補程序可能需要安裝最新的修補程序集。

0

你有沒有試着寫這樣的查詢的SELECT部分​​。它應該返回相同的結果。

它可以在兩個步驟:首先,它計算出所需的最小值和最大值,然後做一些NULL值替換。 (你的CASE語句似乎過於複雜,因爲你沒有考慮到一個空字符串和NULL是Oracle中的相同。)

我會很位數的知道,如果內部SELECT早已錯誤的最大結果。

SELECT 
    matchKey                as matchKey     , 
    NVL(contributionP    ,0)         as contributionP    , 
    NVL(stimulusContributionP  ,0)         as stimulusContributionP  , 
    NVL(contributionC    ,0)         as contributionC    , 
    NVL(ageMultiplier    ,0)         as ageMultiplier    , 
    NVL(rateTableIdP    ,0)         as rateTableIdP    , 
    NVL(rateTableIdC    ,0)         as rateTableIdC    , 
    NVL(accountNbrP     ,0)         as accountNbrP     , 
    NVL(accountNbrC     ,0)         as accountNbrC     , 
    NVL(commissionExpenseAccount ,0)         as commissionExpenseAccount , 
    NVL(commissionReceivableAccount ,0)         as commissionReceivableAccount , 
    NVL(commissionType    ,0)         as commissionType    , 
    NVL(commission     ,0)         as commission     , 
    NVL(pmPm      ,0)         as pmPm      , 
    NVL(fee       ,0)         as fee       , 
    NVL(planAgeGroupIdP    ,0)         as planAgeGroupIdP    , 
    NVL(planAgeGroupIdC    ,0)         as planAgeGroupIdC    , 
    NVL(rafP      ,0)         as rafP      , 
    NVL(rafC      ,0)         as rafC      , 
    NVL(nbrEmployeesRafP   ,0)         as nbrEmployeesRafP   , 
    NVL(nbrEmployeesRafC   ,0)         as nbrEmployeesRafC   , 
    CASE 
    WHEN maxContractId = 'No Contract No' THEN minContractId 
    ELSE maxContractId 
    END                 as contractId     , 
    NVL(basePlanId     ,0)         as basePlanId     , 
    CASE 
    WHEN maxGroupOrPolicyNumber = 'No Contract No' THEN minGroupOrPolicyNumber 
    ELSE maxGroupOrPolicyNumber 
    END                 as groupOrPolicyNumber   , 
    CASE 
    WHEN maxPlanCoverageDescription = 'No Contract No' THEN minPlanCoverageDescription 
    ELSE maxPlanCoverageDescription 
    END                 as planCoverageDescription  , 
    CASE 
    WHEN maxCobraGopn = 'No Contract No' THEN minCobraGopn 
    ELSE maxCobraGopn 
    END                 as cobraGopn     , 
    CASE 
    WHEN maxCobraPcd = 'No Contract No' THEN minCobraPcd 
    ELSE maxCobraPcd 
    END                 as cobraPcd     , 
    CASE 
    WHEN maxCobraCid = 'No Contract No' THEN minCobraCid 
    ELSE maxCobraCid 
    END                 as cobraCid     , 
    benefitId                as benefitId     , 
    NULL                 as insuranceStart    , 
    NULL                 as insuranceEnd    , 
    NULL                 as categoryId      
FROM ( 
    SELECT 
     matchKey               as matchKey     , 
     MAX(contributionP    )         as contributionP    , 
     MAX(stimulusContributionP  )         as stimulusContributionP  , 
     MAX(contributionC    )         as contributionC    , 
     MAX(ageMultiplier    )         as ageMultiplier    , 
     MAX(rateTableIdP    )         as rateTableIdP    , 
     MAX(rateTableIdC    )         as rateTableIdC    , 
     MAX(accountNbrP    )         as accountNbrP     , 
     MAX(accountNbrC    )         as accountNbrC     , 
     MAX(commissionExpenseAccount )         as commissionExpenseAccount , 
     MAX(commissionReceivableAccount)         as commissionReceivableAccount , 
     MAX(commissionType    )         as commissionType    , 
     MAX(commission     )         as commission     , 
     MAX(pmPm      )         as pmPm      , 
     MAX(fee      )         as fee       , 
     MAX(planAgeGroupIdP   )         as planAgeGroupIdP    , 
     MAX(planAgeGroupIdC   )         as planAgeGroupIdC    , 
     MAX(rafP      )         as rafP      , 
     MAX(rafC      )         as rafC      , 
     MAX(nbrEmployeesRafP   )         as nbrEmployeesRafP   , 
     MAX(nbrEmployeesRafC   )         as nbrEmployeesRafC   , 
     MIN(contractId     )         as minContractId    , 
     MAX(contractId     )         as maxContractId    , 
     MAX(basePlanId     )         as basePlanId     , 
     MIN(groupOrPolicyNumber  )         as minGroupOrPolicyNumber  , 
     MAX(groupOrPolicyNumber  )         as maxGroupOrPolicyNumber  , 
     MIN(planCoverageDescription )         as minPlanCoverageDescription , 
     MAX(planCoverageDescription )         as maxPlanCoverageDescription , 
     MIN(cobraGopn     )         as minCobraGopn    , 
     MAX(cobraGopn     )         as maxCobraGopn    , 
     MIN(cobraPcd     )         as mincobraPcd     , 
     MAX(cobraPcd     )         as maxcobraPcd     , 
     MIN(cobraCid     )         as minCobraCid     , 
     MAX(cobraCid     )         as maxCobraCid     , 
     MAX(benefitId     )         as benefitId     
    FROM meCostingXPrePrePre 
    GROUP BY matchKey 
);