2016-04-05 4 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是正する方法: "TM" "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を参照してください。