2016-05-05 47 views
0

我有將代碼插入臨時表的代碼。它會生成以下錯誤: Msg 102,Level 15,State 1,Line 185 ','附近的語法不正確。 Msg 102,Level 15,State 1,Line 186 「TI」附近的語法錯誤。 Msg 102,Level 15,State 1,Line 187 'S1'附近語法不正確。 Msg 156,Level 15,State 1,Line 189 關鍵字'as'附近的語法不正確。 Msg 156,Level 15,State 1,Line 191 關鍵字'as'附近的語法不正確。 Msg 156,Level 15,State 1,Line 193 關鍵字'as'附近的語法不正確。 Msg 156,Level 15,State 1,Line 195 關鍵字'as'附近的語法不正確。當包圍括號的CASE語句時出現TSQL語法錯誤

(下面的代碼開始在我的代碼:) 178線插入#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 

如果我從CASE語句刪除括號中,波浪線移動到第一個逗號上線185與在線184上的paren相同的工具提示消息。

此代碼用於測試S1.P0是否大於FC.P0。如果屬實,則使用一個公式。如果爲false,則使用其他公式。

臨時表保存一個唯一的ID,一個類別標題的NVAR,然後是18個INT數字段。

回答

1

您forgott關閉的情況下Statmant與最終

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

沒有檢查您的查詢的詳細信息,但沒有在案件陳述中缺少「結束」?

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。我一直盯着那些代碼幾個小時,而且由於只有一雙眼睛,我直觀地看到了END,直到你指出它丟失了。非常感謝! –