2012-04-11 32 views
0

腳本如下:無法弄清楚錯誤在此Teradata的腳本

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

您是否使用Teradata數據或Oracle? – lins314159 2012-04-11 23:07:24

回答

0

您已在GROUP BY子句中包含列JE_LN_GLBL_AMT,但這是一個總計值。

+0

不,這不是問題..我補充說錯了,但我現在脫掉它,它仍然不工作..我一塊一塊地測試它......我找出是什麼原因造成了這個問題...... CASE聲明造成的問題..我試圖通過使用實際的選擇...使用一個更多的選擇外面這個選擇和組重寫聲明...如果您有任何其他想法..請通過您的想法在這裏..謝謝 – user1327553 2012-04-11 21:36:39

+0

哦,真?哇,不知道CASE的說法。這聽起來像你在正確的軌道上。 – 2012-04-11 22:20:26

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;