2012-04-11 5 views
0

스크립트는이 테라 데이타의 스크립트에서 오류를 알아낼 수 :다음과 같이

SELECT 
    CAST(SUBSTR(TRIM(ABU_PTY_CD),4,2) AS CHAR(2)) ABU_PTY_CD, 
    ACCTG_PRD_YR_CD, 
    ACCTG_PRD_MO_CD , 

    CASE 
     WHEN (OUDS_FAC_CD > ' ') THEN CAST (SUBSTR(OUDS_FAC_CD, 1, 5) AS CHAR(5)) 
     ELSE CAST (COALESCE(CC_PTY_CD, '') AS CHAR(5)) 
    END OUDS_FAC_CD, 

    CASE 
     WHEN GL_ACCT_NUM > ' ' THEN CAST (SUBSTR(GL_ACCT_NUM, 1, 12) AS CHAR(12)) 
     ELSE CAST (SAP_ACCT_NUM AS CHAR(12)) 
    END ACCT_NUM, 

    CASE 
     WHEN LE_PTY_CD > ' ' THEN CAST (LE_PTY_CD AS CHAR(4)) 
     ELSE CAST (SUBSTR(COMP_PTY_CD, 1, 4) AS CHAR(4)) 
    END COMP_PTY_CD, 

    JE_LWR_TIER_RPTG_NUM, 
    LT2_NM, 

    CASE 
     WHEN PRD_VAR_CD > ' ' THEN CAST (PRD_VAR_CD AS CHAR(3)) 
     ELSE CAST (COALESCE(FA_PTY_CD, '') AS CHAR(3)) 
    END FA_PTY_CD, 

    JE_LN_GLBL_CCY_CD, 
    JE_LN_LC_CD, 

    CASE 
     WHEN GL_ACCT_LVL_NUM > ' ' THEN CAST(SUBSTR(GL_ACCT_LVL_NUM,1,10) AS CHAR(11)) 
     ELSE CAST(SUBSTR(FNCL_STMT_LN_NUM,1,11) AS CHAR(11)) 
    END ACCT_LVL_NUM, 

    SUM (JE_LN_GLBL_AMT) JE_LN_GLBL_AMT, 
    DDU_FAC_CD, 
    JE_HDR_DESC, 
    JE_HDR_NUM, 
    JE_GRP_NUM, 
    SOURCE_SYSTEM_ID 
FROM EDW_BI_SL_M1.BFV 
WHERE CPC_PTY_CD = '00000000SX' 
     AND TO_CHAR(RPTG_ACCTG_DT, 'YYYY') >= TO_CHAR(ADD_MONTHS((CURRENT_DATE),-1),'YYYY') 
     AND JE_VERS_NUM in ('200', '001') 
     AND SRC_LDGR_CD <> 'LG' 
     AND ACCTG_PRD_MO_CD < 13 
GROUP BY ABU_PTY_CD, ACCTG_PRD_YR_CD, ACCTG_PRD_MO_CD, OUDS_FAC_CD, ACCT_NUM, COMP_PTY_CD, JE_LWR_TIER_RPTG_NUM, 
LT2_NM, FA_PTY_CD, JE_LN_GLBL_CCY_CD, JE_LN_LC_CD, ACCT_LVL_NUM, JE_LN_GLBL_AMT, DDU_FAC_CD, JE_HDR_DESC, JE_HDR_NUM, JE_GRP_NUM, 
SOURCE_SYSTEM_ID; 

오류 메시지 :

(3504) : 선택이 아닌 집계 값은 연관된 그룹의 일부 여야합니다

+0

것은 당신이 테라 데이타 또는 Oracle을 사용하고 계십니까을 당신도 표현을 사용할 필요가? – lins314159

답변

0

열을 GROUP BY 절에 포함 시켰지만 이는 합계 된 값입니다.

+0

아니, 그게 문제가 아니야. 내가 실수로 추가했지만, 지금은 여전히 ​​작동하지 않습니다. 나는 그것을 한 장씩 테스트하고있었습니다. 문제의 원인을 찾아 냈습니다. CASE 진술은 문제를 일으키는 것입니다. 나는 실제 선택을 사용하여이 선택과 그룹 밖에서 하나 더 선택을 사용하여 진술을 재작 성하려고 노력 중입니다 ... 다른 아이디어가 있다면 ... 여기에 당신의 아이디어를 통해 ... 고맙습니다 – user1327553

+0

오, 정말? CASE 문에 대해 알지 못했습니다. 네가 제대로 된 것처럼 들린다. –

0

같은 쿼리의 GROUP BY 절 (적어도 Oracle에서는)에서이 쿼리에서 만든 별칭을 사용할 수 없습니다. 다음 별칭을 사용하여 그룹

... 
GROUP BY 
CAST(SUBSTR(TRIM(ABU_PTY_CD),4,2) AS CHAR(2)), 
..., 
CASE 
    WHEN GL_ACCT_LVL_NUM > ' ' THEN CAST(SUBSTR(GL_ACCT_LVL_NUM,1,10) AS CHAR(11)) 
    ELSE CAST(SUBSTR(FNCL_STMT_LN_NUM,1,11) AS CHAR(11)) 
END, 
..., 
SOURCE_SYSTEM_ID 

또는 하위 쿼리를 만들고 :

SELECT ABU_PTY_CD, ... 
FROM (
SELECT 
    CAST(SUBSTR(TRIM(ABU_PTY_CD),4,2) AS CHAR(2)) ABU_PTY_CD, 
    ... 
FROM EDW_BI_SL_M1.BFV 
WHERE CPC_PTY_CD = '00000000SX' 
     AND TO_CHAR(RPTG_ACCTG_DT, 'YYYY') >= TO_CHAR(ADD_MONTHS((CURRENT_DATE),-1),'YYYY') 
     AND JE_VERS_NUM in ('200', '001') 
     AND SRC_LDGR_CD <> 'LG' 
     AND ACCTG_PRD_MO_CD < 13 
) 
GROUP BY ABU_PTY_CD, ACCTG_PRD_YR_CD, ACCTG_PRD_MO_CD, OUDS_FAC_CD, ACCT_NUM, COMP_PTY_CD, JE_LWR_TIER_RPTG_NUM, 
LT2_NM, FA_PTY_CD, JE_LN_GLBL_CCY_CD, JE_LN_LC_CD, ACCT_LVL_NUM, JE_LN_GLBL_AMT, DDU_FAC_CD, JE_HDR_DESC, JE_HDR_NUM, JE_GRP_NUM, 
SOURCE_SYSTEM_ID;