2016-05-05 5 views
0

私は、レコードを一時テーブルに挿入するコードを用意しています。次のエラーを生成します。 メッセージ102、レベル15、状態1、行185 '、'の近くの構文が正しくありません。 メッセージ102、レベル15、状態1、行18 'TI'の近くの構文が正しくありません。 メッセージ102、レベル15、状態1、行18 'S1'の近くの構文が正しくありません。 メッセージ156、レベル15、状態1、行18 キーワード 'as'の近くの構文が正しくありません。 メッセージ156、レベル15、状態1、行191 'as'キーワードの構文が正しくありません。 メッセージ156、レベル15、状態1、行193 キーワード 'as'の近くの構文が正しくありません。 メッセージ156、レベル15、状態1、行195 'as'というキーワードの構文が正しくありません。CASE文を囲むときのTSQL構文エラー

(次のコードは、私のコードの行178で開始:) 私は、CASEステートメントからとライン185上の最初のカンマまでの波線の移動を括弧を削除する場合#Month18Result

SELECT TI.EQId, 'Inventory' 
    ,(CASE 
     WHEN S1.P0 > FC.P0 
     THEN TI.P0+OPO.P0-FP.P0 
    ELSE 
     [TI].[P0]+[S1].[P0]+[OPO].[P0]-[FC].[P0]-[FP].[P0]-[S2].[P0]) <--(LINE 184) THIS PAREN IS WHERE THE RED SQUIGGLE INDICATES "INCORRECT SYNTAX NEAR ')' 
    ,'','','','','','','','','','','','','','','','','' 
FROM (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'TotalInventory') TI 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Sales') S1 
    ON S1.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Open PO') as OPO 
    ON OPO.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Forecast') as FC 
    ON FC.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Further Process') as FP 
    ON FP.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Safety Shock') as S2 
    ON S2.EQId = TI.EQId 

に挿入します行184の括弧と同じツールチップメッセージ。

このコードは、S1.P0がFC.P0より大きいかどうかをテストするためのコードです。真の場合は、1つの数式を使用します。 falseの場合は、他の式を使用します。

一時表には、一意のID、カテゴリタイトルのNVAR、およびINT番号の18個のフィールドが格納されます。

答えて

1

あなたは終わり

SELECT TI.EQId, 'Inventory' 
    ,(CASE 
     WHEN S1.P0 > FC.P0 
     THEN TI.P0+OPO.P0-FP.P0 
    ELSE 
     [TI].[P0]+[S1].[P0]+[OPO].[P0]-[FC].[P0]-[FP].[P0]-[S2].[P0]) END AS SOMENAME 
FROM (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'TotalInventory') TI 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Sales') S1 
    ON S1.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Open PO') as OPO 
    ON OPO.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Forecast') as FC 
    ON FC.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Further Process') as FP 
    ON FP.EQId = TI.EQId 
LEFT JOIN (SELECT EQId, P0 FROM #Month18Result WHERE TransactionType = 'Safety Shock') as S2 
    ON S2.EQId = TI.EQId 
1

質問を詳細にチェックしませんでしたが、case文に "end"がありませんか?

https://msdn.microsoft.com/en-us/library/ms181765.aspx

Searched CASE expression: 
CASE 
    WHEN Boolean_expression THEN result_expression [ ...n ] 
    [ ELSE else_result_expression ] 
END 
+0

WOWとケースStatmantを閉じforgott。私はそのコードを何時間も見つめていて、一組の目のために、それが欠落していると指摘するまで視覚的にENDを見ました。本当にありがとう! –

関連する問題