2017-09-28 18 views
0

私が持っているこのクエリ私はエラーを取得間違ったクエリ

SELECT * 
FROM 
    (SELECT 
     TT.RECID, TT.TRANSDATE, 
     TT.DATAAREAID, TT.SOURCERECID, 
     TT.SOURCECURRENCYCODE, TT.TAXAMOUNT, 
     TT.TAXBASEAMOUNT, TT.TAXBASEAMOUNTCUR, 
     TT.TAXAMOUNTCUR, TT.TAXORIGIN, 
     TT.VOUCHER, TT.TAXITEMGROUP, 
     TT.TAXCODE, TT.SOURCEBASEAMOUNTCUR, 
     TT.SOURCETAXAMOUNTCUR, 
     TTGJAERIVA.TAXTRANSRELATIONSHIP, 
     TTGJAERIVA.GENERALJOURNALACCOUNTENTRY, 
     TTGJAERIVA.LEDGERDIMENSION, 
     GJAERIVA.TEXT, 
     GJAERIVA.LEDGERDIMENSION AS LEDGERDIMENSIONGAE, 
     GJAERIVA.POSTINGTYPE 
    FROM 
     TAXTRANS TT 
    INNER MERGE JOIN 
     TAXTRANSGENERALJOURNALACCOUNTENTRY TTGJAERIVA ON TTGJAERIVA.TAXTRANS = TT.RECID 
    INNER MERGE JOIN 
     GENERALJOURNALACCOUNTENTRY GJAERIVA ON TTGJAERIVA.GENERALJOURNALACCOUNTENTRY = GJAERIVA.RECID 
              AND GJAERIVA.POSTINGTYPE IN (14, 236, 71, 41) 
    WHERE 
     (TT.TAXORIGIN <> 11 
      AND TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30') 
     OR 
     (TT.TAXORIGIN = 11 
      AND TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30')) AS T 

---- --JOIN 
LEFT MERGE JOIN 
    (SELECT 
     SOURCERECID, TAXITEMGROUP, TAXCODE, 
     GENERALJOURNALACCOUNTENTRY, VOUCHER, TAXAMOUNT, 
     TAXAMOUNTCUR 
    FROM 
     T) TTRIVA ON T.VOUCHER = TTRIVA.VOUCHER 
        AND T.SOURCERECID = TTRIVA.SOURCERECID 
        AND TT.TAXITEMGROUP = TTRIVA.TAXITEMGROUP 
        AND (TTRIVA.TAXCODE LIKE 'RIVA%') 
        AND TTRIVA.GENERALJOURNALACCOUNTENTRY = TTGJAE.GENERALJOURNALACCOUNTENTRY 

:サブクエリへ

Invalid object name 'T'.

、直後に左マージは(クエリの最終時)に参加し

---- --JOIN 
LEFT MERGE JOIN 
    (SELECT 
     SOURCERECID, TAXITEMGROUP, TAXCODE, 
     GENERALJOURNALACCOUNTENTRY, VOUCHER, 
     TAXAMOUNT, TAXAMOUNTCUR 
    FROM 
     T) TTRIVA ON T.VOUCHER = TTRIVA.VOUCHER 
        AND T.SOURCERECID = TTRIVA.SOURCERECID 
        AND TT.TAXITEMGROUP = TTRIVA.TAXITEMGROUP 
        AND (TTRIVA.TAXCODE LIKE 'RIVA%') 
        AND TTRIVA.GENERALJOURNALACCOUNTENTRY = TTGJAE.GENERALJOURNALACCOUNTENTRY 

参加前にクエリの結果として「T」を使用すると、なぜそれが発生するのかわかりません。よろしくお願いします。

+0

SQLを分割したい場合があります。これは将来的にメンテナンスの悪夢になるだろう。 – dhiman

+0

私はその悪夢を信じています@DhimanBhattacharya – Ledwing

+0

サイドノート:特にSQL Serverでは、[BETWEEN'を使用しないでください](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/)何の間に - と - 悪魔の持っているcommon.aspx)。私は、完全なタイムスタンプではなく、「transdate」が日付であることを完全には確信していません –

答えて

0

SQL 構文のエラーを明らかにするには、いつものように慎重な書式設定が便利です。最初WHERE句の前に

SELECT * FROM (
     SELECT 
    TT.RECID, 
    -- etc 
    GJAERIVA.POSTINGTYPE 
    FROM TAXTRANS TT 
    INNER MERGE JOIN TAXTRANSGENERALJOURNALACCOUNTENTRY TTGJAERIVA 
      ON TTGJAERIVA.TAXTRANS = TT.RECID 
    INNER MERGE JOIN GENERALJOURNALACCOUNTENTRY GJAERIVA 
      ON TTGJAERIVA.GENERALJOURNALACCOUNTENTRY = GJAERIVA.RECID 
      AND GJAERIVA.POSTINGTYPE IN(14,236,71,41 
) -- as ???? 
WHERE 
    (TT.TAXORIGIN <> 11 AND 
    TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30') 
OR (TT.TAXORIGIN = 11 AND 
    TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30') 

) AS T 
---- --JOIN 
    LEFT MERGE JOIN --- etc. 

決算)は、あなたが望むもの おそらくではありません。

SQLは宣言型言語です。 の宣言をできるだけ明確にすると、はるかに使いやすくなります。あなたのクエリを再フォーマットすることで、例えば、我々はすぐにすべてのTT.TAXORIGINが11と等しく、またはしないのでWHERE句が

WHERE TT.TRANSDATE BETWEEN '2015-01-01' AND '2015-04-30' 

に減少させることができる見ることができます。

関連する問題