2011-06-15 85 views
2

它已經有一段時間了我,因爲我最後一次做的Oracle SQL,希望有人能告訴我,爲什麼我就得到了933:ORA-00933:SQL命令不能在子查詢中正確地結束與加盟

SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr 
, TRIM(A.VOUCHER) AS INinvoicenmbr 
, A.DATE_ AS INinvoiceDate 
, A.DUEDATE AS INinvoiceDueDate 
, A.TXT AS INDescription 
, A.EXCHANGECODE AS INCurrencyCode 
, subq.AMOUNTMST AS INOriginalamount 
, subq.SETTLEAMOUNTMST AS INpaidAmount 
, subq.OPENAMOUNT AS INOpenAmount 
FROM (
    SELECT DEBTRANS.VOUCHER AS VOUCHER, SUM(DEBTRANS.AMOUNTMST) AS AMOUNTMST 
    , SUM(DEBTRANS.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST 
    , SUM(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) AS OPENAMOUNT 
    FROM XAL_SUPERVISOR.DEBTRANS DEBTRANS 
    WHERE DEBTRANS.OPEN = 1 AND 
    DEBTRANS.TRANSTYPE <> 9 AND 
    (DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) <> 0 AND 
    DEBTRANS.DATASET = 'FIK' 
    GROUP BY DEBTRANS.VOUCHER) subq INNER JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER 

在SQL Plus中 由於提前,

邁克爾

+0

有更多的這個查詢?我剛剛嘗試類似的,它工作正常。 – Tsar 2011-06-15 13:23:30

+1

難道是我在使用Oracle 8i嗎? – 2011-06-15 13:38:57

+0

WHERE DEBTRANS.OPEN ...中的'OPEN'是否可能是關鍵字? – 2011-06-15 13:46:28

回答

2

你對使用8i的評論解釋它。直到9i之後,ANSI '92連接語法纔在Oracle中實現。

您需要修改查詢:

 SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr 
    , TRIM(A.VOUCHER) AS INinvoicenmbr 
    , A.DATE_ AS INinvoiceDate 
    , A.DUEDATE AS INinvoiceDueDate 
    , A.TXT AS INDescription 
    , A.EXCHANGECODE AS INCurrencyCode 
    , subq.AMOUNTMST AS INOriginalamount 
    , subq.SETTLEAMOUNTMST AS INpaidAmount 
    , subq.OPENAMOUNT AS INOpenAmount 
    FROM (
     SELECT DEBTRANS.VOUCHER AS VOUCHER, SUM(DEBTRANS.AMOUNTMST) AS AMOUNTMST 
     , SUM(DEBTRANS.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST 
     , SUM(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) AS OPENAMOUNT 
     FROM XAL_SUPERVISOR.DEBTRANS DEBTRANS 
     WHERE DEBTRANS.OPEN = 1 AND 
     DEBTRANS.TRANSTYPE <> 9 AND 
     (DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) <> 0 AND 
     DEBTRANS.DATASET = 'FIK' 
     GROUP BY DEBTRANS.VOUCHER) subq, 
     DEBTRANS A 
WHERE A.VOUCHER = subq.VOUCHER; 
+0

感謝DCookie,幾乎在那裏..仍然是一個933,可能是因爲'DEBTRANS A WHERE A.VOUCHER = subq.VOUCHER 「? – 2011-06-15 14:51:07

+0

Duh。 subq後需要一個逗號;-)回答編輯。 – DCookie 2011-06-15 14:55:13

+0

超級!非常感謝你的幫助! – 2011-06-15 14:59:36

1

什麼是要加入到DEBTRANS,是XAL_SUPERVISOR.DEBTRANS的另一個實例? 如果是這樣,請不要使用DEBTRANS作爲子查詢中的別名,這很混亂。將其更改爲其他內容並重試,例如

SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr 
, TRIM(A.VOUCHER) AS INinvoicenmbr 
, A.DATE_ AS INinvoiceDate 
, A.DUEDATE AS INinvoiceDueDate 
, A.TXT AS INDescription 
, A.EXCHANGECODE AS INCurrencyCode 
, subq.AMOUNTMST AS INOriginalamount 
, subq.SETTLEAMOUNTMST AS INpaidAmount 
, subq.OPENAMOUNT AS INOpenAmount 
FROM (
    SELECT dt.VOUCHER AS VOUCHER 
    , SUM(dt.AMOUNTMST) AS AMOUNTMST 
    , SUM(dt.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST 
    , SUM(dt.AMOUNTMST - dt.SETTLEAMOUNTMST) AS OPENAMOUNT 
    FROM XAL_SUPERVISOR.DEBTRANS dt 
    WHERE dt.OPEN = 1 AND 
    dt.TRANSTYPE <> 9 AND 
    (dt.AMOUNTMST - dt.SETTLEAMOUNTMST) <> 0 AND 
    dt.DATASET = 'FIK' 
    GROUP BY dt.VOUCHER) subq INNER JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER 
+0

看起來像是如果我通過錯誤刪除組持續存在? – 2011-06-15 13:18:37

+0

thx BDN,但沒有任何變化 – 2011-06-15 14:09:41

0

相反

INNER的最後一行的JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER

使用

INNER JOIN DEBTRANS A ON A.VOUCHER = subq.INinvoicenmbr

+0

對不起,但它似乎沒有工作... – 2011-06-15 13:29:10

相關問題