2016-04-05 97 views
-1
SELECT CU.CUST_CODE 
FROM AR_CUSTOMERS CU 
WHERE CU.CUST_CODE = TM.CUST_CODE 
UNION 
SELECT ITS.ITEMS_CODE 
FROM AR_ITEMS ITS 
WHERE ITS.ITEMS_CODE = TM.ITEM_CODE 
UNION 
SELECT ITS.ITEMS_NAME 
FROM AR_ITEMS ITS 
WHERE TM.INVOICE_NO = TD.INVOICE_NO AND ITS.ITEMS_CODE = TD.ITEM_CODE 
UNION 
SELECT TO_CHAR(TM.JOB_DATE,'MON-YY')MON FROM AR_TRANS_MASTER TM 
UNION 
SELECT TO_CHAR(TM.JOB_DATE,'MM-YY')MM FROM AR_TRANS_MASTER TM 
UNION 
SELECT SUM(TD.QUANTITY)QUANTITY, SUM(TD.PRICE)UNIT 
FROM AR_TRANS_DETAIL TD 
WHERE ITS.ITEMS_CODE = TD.ITEM_CODE 
AND 
TM.JOB_DATE BETWEEN :STARTDATE AND :STOPDATE 
GROUP BY 
CU.CUST_CODE,ITS.ITEMS_CODE,ITS.ITEMS_NAME,TO_CHAR(TM.JOB_DATE,'MON-YY'),TO_CHAR(TM.JOB_DATE,'MM-YY') 
ORDER BY 
MM ASC; 

ORA-00904: 「以舊換新」, 「CUST_CODE」:無效的標識符 00904. 00000 - 「%S:無效的標識符」 *原因:
*行動:在錯誤行:3列:22如何糾正這個錯誤

+4

您無法訪問TM.CUST_CODE。在進行UNION時,每個SELECT都相互「隔離」。 – jarlh

+3

您還可以從聯合的每個分支中獲取不同的數據 - 不同的數據類型,甚至不同數量的列。當然,你打算把這些表加在一起,而不是聯合起來? –

回答

2

您將來自多個獨立查詢的單個選擇列表組合在一起,這些列表不能看到彼此的數據或結果;並獲得不同數量的列和不同的數據類型。有幾個沒有限制,可能會得到很多你不期待的數據。

您應該一起加入表格,而不是聯合單獨的查詢;如:

SELECT CU.CUST_CODE, ITS.ITEMS_CODE, ITS.ITEMS_NAME, TO_CHAR(TM.JOB_DATE,'MON-YY') MON, 
    TO_CHAR(TM.JOB_DATE,'MM-YY') MM, SUM(TD.QUANTITY) QUANTITY, SUM(TD.PRICE) UNIT 
FROM AR_TRANS_MASTER TM 
JOIN AR_CUSTOMERS CU 
ON CU.CUST_CODE = TM.CUST_CODE 
JOIN AR_ITEMS ITS 
ON ITS.ITEMS_CODE = TM.ITEM_CODE 
JOIN AR_TRANS_DETAIL TD 
ON TD.INVOICE_NO = TM.INVOICE_NO 
AND TD.ITEM_CODE = ITS.ITEMS_CODE 
WHERE TM.JOB_DATE BETWEEN :STARTDATE AND :STOPDATE 
GROUP BY CU.CUST_CODE, ITS.ITEMS_CODE, ITS.ITEMS_NAME, TO_CHAR(TM.JOB_DATE,'MON-YY'), 
    TO_CHAR(TM.JOB_DATE,'MM-YY') 
ORDER BY MM ASC; 

未經測試,您需要檢查連接條件是否按照您的預期進行了轉換。

您可以在文檔中閱讀有關the UNION set operatorjoins的更多信息。