2017-09-07 187 views
0

以下のSQL文を実行しようとするとエラーが発生します。 WHEREの周りに別の予約語や括弧が必要なのかどうかわかりませんが、私は考えがなくなっています。エラーメッセージ - Msg 156、レベル15、状態1、キーワード 'WHERE'の近くの構文が正しくありません

"Msg 156、レベル15、状態1、行20 " WHERE 'というキーワードの構文が正しくありません。 "

誰でもこのエラーを修正する方法を理解できますか?

ありがとうございます!

SELECT dbo.PURCHASING_DETAIL.ID 
    ,dbo.SCA_SS_INVOICELINESALL.* 
    ,dbo.SCA_SS_INVOICESALL.* 
    ,dbo.PURCHASING_DETAIL.QUOTEDPRICE 
    ,dbo.PURCHASING_DETAIL.GLACCT 
    ,dbo.PURCHASING_DETAIL.[PO DATE] 
FROM dbo.PURCHASING_DETAIL 
INNER JOIN (
    (
     dbo.SCA_SS_INVOICELINESALL INNER JOIN dbo.SCA_SS_INVOICESALL ON dbo.SCA_SS_INVOICELINESALL.INVOICESALLID = dbo.SCA_SS_INVOICESALL.INVOICESALLID 
     ) INNER JOIN dbo.PURCHASING_DETAIL ON (dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM) 
     AND (dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM) 
    ) 
INNER JOIN dbo.SCA_SS_LOCATION ON (dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID) 
    AND (dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID) 
WHERE (dbo.PURCHASING_DETAIL.[6DIGIT] = '50002') 
    AND DATEDIFF(month, [PO DATE], GETDATE()) <= 12 
+1

それはINNERでのJOINの周りの括弧は、私は – Steve

+0

がちょうどDATEDIFF()AND GETDATE() – etsa

+0

@etsaハズレのための1つを残して(すべての括弧を削除考える問題thatsのです慎重に見てください。 'INNER JOIN (dbo.SCA_SS_INVOICELINESALL INNER JOIN dbo.SCA_SS_INVOICESAL' – lad2025

答えて

0

また、結合に含まれていないテーブルを参照するいくつかのJOIN式があります。これらはおそらくWHERE節にあるはずです。それはうまくいくが、読むのは本当に難しい。

また、すべてのかっこを削除することに同意します。

また、私がコメントで述べたように、Purchasing_Detailは2回あります。

これを試してみてください:

SELECT dbo.PURCHASING_DETAIL.ID, 
     dbo.SCA_SS_INVOICELINESALL.*, 
     dbo.SCA_SS_INVOICESALL.*, 
     dbo.PURCHASING_DETAIL.QUOTEDPRICE, 
     dbo.PURCHASING_DETAIL.GLACCT, 
     dbo.PURCHASING_DETAIL.[PO DATE] 

FROM dbo.SCA_SS_INVOICELINESALL 

    INNER JOIN dbo.SCA_SS_INVOICESALL 
     ON dbo.SCA_SS_INVOICELINESALL.INVOICESALLID = dbo.SCA_SS_INVOICESALL.INVOICESALLID 

    INNER JOIN dbo.PURCHASING_DETAIL 
     ON dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM 

    INNER JOIN dbo.SCA_SS_LOCATION 
     ON (dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID) 

WHERE (dbo.PURCHASING_DETAIL.[6DIGIT] = '50002') 
    AND (dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM) 
    AND (dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID) 
    AND DATEDIFF(month,[PO DATE], GETDATE()) <= 12 
+1

これは私の(複数の)問題を解決しました。再フォーマットしていただきありがとうございます。私はまだSQL文を構造化する方法を学んでいます –

+0

助けてくれてうれしいです。がんばろう。 –

+0

WHERE句からJOIN句へのAND(dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM) AND(dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID) – etsa

0

あなたは、いくつかの不要な(重​​複INNER JOIN dbo.PURCHASING_DETAILのように)参加し、あなたのクエリ内のいくつかの役に立たないカッコ持っています。これを試してください:

SELECT dbo.PURCHASING_DETAIL.ID, 
     dbo.SCA_SS_INVOICELINESALL.*, 
     dbo.SCA_SS_INVOICESALL.*, 
     dbo.PURCHASING_DETAIL.QUOTEDPRICE, 
     dbo.PURCHASING_DETAIL.GLACCT, 
     dbo.PURCHASING_DETAIL.[PO DATE] 
FROM dbo.PURCHASING_DETAIL 
JOIN dbo.SCA_SS_INVOICELINESALL 
    ON dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM 
JOIN dbo.SCA_SS_INVOICESALL  
    ON dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM 
JOIN dbo.SCA_SS_LOCATION 
    ON dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID AND 
     dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID 
WHERE dbo.PURCHASING_DETAIL.[6DIGIT] = '50002' 
     AND DATEDIFF(month,[PO DATE], GETDATE()) <= 12 
+0

これはうまくいくが、最後の "ON"ステートメントがまだ結合テーブルにリンクされた2つの異なるテーブルを参照しているという事実は気に入らない。 –

+0

@ JohnPasquet、それは問題ではない、時には(本当に)そのようなチェックをする必要がある。 –

関連する問題