2015-03-13 27 views
-4

我有一個查詢,我寫下面。我收到錯誤。我已經添加了雙引號。還是行不通。請建議我。來自關鍵字not found在預期情況下的語句

SELECT 

TO_DATE(TO_CHAR(BATCH_CREATION_TIME,'YYYY/MM/DD'),'YYYY/MM/DD') AS CREATION_DATE, 
SUM(DECODE(CDR_ACTUAL_COUNT,NULL,0,CDR_ACTUAL_COUNT)) AS CCOLLECTED, 
SUM(DECODE(CDR_ACTUAL_COUNT,NULL,0,CDR_ACTUAL_COUNT)) - SUM(DECODE(CDR_PARSE_ERROR_COUNT,NULL,0,CDR_PARSE_ERROR_COUNT)) 
- SUM(DECODE(CDR_DISCARD_COUNT,NULL,0,CDR_DISCARD_COUNT)) AS COLLECTED, 
SUM(DECODE(VALIDATION_CNR_COUNT,NULL,0,VALIDATION_CNR_COUNT)) + SUM(DECODE(VALIDATION_CE_COUNT,NULL,0,VALIDATION_CE_COUNT)) 
+ SUM(DECODE(VALIDATION_CR_COUNT,NULL,0,VALIDATION_CR_COUNT)) + SUM(DECODE(VALIDATION_NCR_COUNT,NULL,0,VALIDATION_NCR_COUNT)) AS ERRORED, 
SUM(DECODE(VALIDATION_RNC_COUNT,NULL,0,VALIDATION_RNC_COUNT)) + SUM(DECODE(VALIDATION_RV_COUNT,NULL,0,VALIDATION_RV_COUNT)) AS PROCESSED 
"CDR_SOURCE_TYPE" = 
CASE 
WHEN CDR_SOURCE_TYPE IN ('SMSC') THEN DECODE(NETWORK_TYPE,'CDMA','SMSC_CDMA','HSPA','SMSC_HSPA') AS "CDR_SOURCE_TYPE" 
WHEN CDR_SOURCE_TYPE IN ('P_GW') and BATCH_ID like '%_PGW_%' and BATCH_ID like '%_PGW_REPLAY_%' THEN 'PGW_REPLAY' AS "CDR_SOURCE_TYPE" 
WHEN CDR_SOURCE_TYPE IN ('OCS_UDR','OCS_EDR','OCS_CDMA_EDR','OCS_UDR_RECOVER','MACH_UDR','AAA','PTT_CDMA','OCS_CDMA_UDR','MTX') THEN "CDR_SOURCE_TYPE" 
--ELSE 'Excelent' 
END 

FROM BATCH_SUMMARY 

WHERE     
BATCH_CREATION_TIME BETWEEN TO_DATE(TO_CHAR(sysdate,'YYYY-MM-DD') ||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
AND TO_DATE(TO_CHAR(sysdate,'YYYY-MM-DD') ||' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') 
AND BATCH_CREATION_TIME < (SYSDATE -1/24) 
--and CDR_SOURCE_TYPE IN ('OCS_UDR','OCS_EDR','OCS_CDMA_EDR','OCS_UDR_RECOVER','MACH_UDR','AAA','PTT_CDMA','OCS_CDMA_UDR','MTX') 

GROUP BY 
TO_DATE(TO_CHAR(BATCH_CREATION_TIME,'YYYY/MM/DD'),'YYYY/MM/DD'), CDR_SOURCE_TYPE 

回答

0

貌似有comma失蹤。

還需要使用整個case聲明group by沒有單獨列名

SELECT 
To_date(To_char(BATCH_CREATION_TIME,'YYYY/MM/DD'),'YYYY/MM/DD') AS CREATION_DATE, 
Sum(Decode(CDR_ACTUAL_COUNT,NULL,0,CDR_ACTUAL_COUNT)) AS CCOLLECTED, 
Sum(Decode(CDR_ACTUAL_COUNT,NULL,0,CDR_ACTUAL_COUNT)) - Sum(Decode(CDR_PARSE_ERROR_COUNT,NULL,0,CDR_PARSE_ERROR_COUNT)) 
- Sum(Decode(CDR_DISCARD_COUNT,NULL,0,CDR_DISCARD_COUNT)) AS COLLECTED, 
Sum(Decode(VALIDATION_CNR_COUNT,NULL,0,VALIDATION_CNR_COUNT)) + Sum(Decode(VALIDATION_CE_COUNT,NULL,0,VALIDATION_CE_COUNT)) 
+ Sum(Decode(VALIDATION_CR_COUNT,NULL,0,VALIDATION_CR_COUNT)) + Sum(Decode(VALIDATION_NCR_COUNT,NULL,0,VALIDATION_NCR_COUNT)) AS ERRORED, 
Sum(Decode(VALIDATION_RNC_COUNT,NULL,0,VALIDATION_RNC_COUNT)) + Sum(Decode(VALIDATION_RV_COUNT,NULL,0,VALIDATION_RV_COUNT)) AS PROCESSED , 

CASE 
WHEN CDR_SOURCE_TYPE IN ('SMSC') THEN Decode(NETWORK_TYPE,'CDMA','SMSC_CDMA','HSPA','SMSC_HSPA') 
WHEN CDR_SOURCE_TYPE IN ('P_GW') AND BATCH_ID LIKE '%_PGW_%' AND BATCH_ID LIKE '%_PGW_REPLAY_%' THEN 'PGW_REPLAY' 
WHEN CDR_SOURCE_TYPE IN ('OCS_UDR','OCS_EDR','OCS_CDMA_EDR','OCS_UDR_RECOVER','MACH_UDR','AAA','PTT_CDMA','OCS_CDMA_UDR','MTX') THEN CDR_SOURCE_TYPE 
--ELSE 'Excelent' 
END AS CDR_SOURCE_TYPE 
FROM BATCH_SUMMARY 

WHERE 
BATCH_CREATION_TIME BETWEEN To_date(To_char(sysdate,'YYYY-MM-DD') ||' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
AND To_date(To_char(sysdate,'YYYY-MM-DD') ||' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') 
AND BATCH_CREATION_TIME < (SYSDATE -1/24) 
--and CDR_SOURCE_TYPE IN ('OCS_UDR','OCS_EDR','OCS_CDMA_EDR','OCS_UDR_RECOVER','MACH_UDR','AAA','PTT_CDMA','OCS_CDMA_UDR','MTX') 

GROUP BY 
TO_DATE(TO_CHAR(BATCH_CREATION_TIME,'YYYY/MM/DD'),'YYYY/MM/DD'), 
CASE 
WHEN CDR_SOURCE_TYPE IN ('SMSC') THEN Decode(NETWORK_TYPE,'CDMA','SMSC_CDMA','HSPA','SMSC_HSPA') AS "CDR_SOURCE_TYPE" 
WHEN CDR_SOURCE_TYPE IN ('P_GW') AND BATCH_ID LIKE '%_PGW_%' AND BATCH_ID LIKE '%_PGW_REPLAY_%' THEN 'PGW_REPLAY' AS "CDR_SOURCE_TYPE" 
WHEN CDR_SOURCE_TYPE IN ('OCS_UDR','OCS_EDR','OCS_CDMA_EDR','OCS_UDR_RECOVER','MACH_UDR','AAA','PTT_CDMA','OCS_CDMA_UDR','MTX') THEN "CDR_SOURCE_TYPE" 
--ELSE 'Excelent' 
END 

還要確保Aliasname=column_name格式在你的數據庫支持。在Sql服務器中它將工作。否則,使用

Column_name as Aliasname 

更新:

SELECT CASE -- CDR_SOURCE_TYPE removed 
     WHEN CDR_SOURCE_TYPE IN ('SMSC') THEN Decode(NETWORK_TYPE, 'CDMA', 'SMSC_CDMA', 
                     'HSPA', 'SMSC_HSPA') 
     WHEN CDR_SOURCE_TYPE IN ('P_GW') 
       AND BATCH_ID LIKE '%_PGW_%' 
       AND BATCH_ID LIKE '%_PGW_REPLAY_%' THEN 'PGW_REPLAY' 
     END 
FROM BATCH_SUMMARY 
+0

添加逗號...仍然相同 – user2642751 2015-03-13 14:25:03

+0

@ user2642751 - 是否將別名名稱「CDR_SOURCE_TYPE」='更改爲CDR_SOURCE_TYPE格式 – 2015-03-13 14:25:57

+0

是的,我完全刪除了別名。 – user2642751 2015-03-13 14:37:51

0

只需專注於case語句在這裏,而不是做

"CDR_SOURCE_TYPE" = (your case statement) 

(your case statement) as 'CDR_SOURCE_TYPE' 
+0

改變它像下面CASE CDR_SOURCE_TYPE WHEN CDR_SOURCE_TYPE IN( 'SMSC')然後解碼(NETWORK_TYPE, 'CDMA', 'SMSC_CDMA',「HSPA ','SMSC_HSPA')仍然是相同的 – user2642751 2015-03-13 14:25:41

相關問題