2016-05-05 11 views
0

Ich habe Code, wo ich Datensätze in eine temporäre Tabelle einfüge. Es generiert die folgenden Fehler: Nachricht 102, Ebene 15, Status 1, Zeile 185 Falsche Syntax in der Nähe von ','. Msg 102, Ebene 15, Status 1, Zeile 186 Falsche Syntax in der Nähe von 'TI'. Msg 102, Ebene 15, Status 1, Zeile 187 Falsche Syntax in der Nähe von 'S1'. Msg 156, Ebene 15, Status 1, Zeile 189 Falsche Syntax in der Nähe des Schlüsselwortes 'as'. Nachricht 156, Ebene 15, Status 1, Zeile 191 Falsche Syntax in der Nähe des Schlüsselwortes 'as'. Msg 156, Ebene 15, Status 1, Zeile 193 Falsche Syntax in der Nähe des Schlüsselwortes 'as'. Msg 156, Ebene 15, Status 1, Zeile 195 Falsche Syntax in der Nähe des Schlüsselwortes 'as'.TSQL-Syntaxfehler beim Umgeben von CASE-Anweisung mit Klammern

(Der folgende Code beginnt in Zeile 178 von meinem Code :) Insert into # 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 

Wenn ich die Pars aus der CASE-Anweisung zu entfernen, auf die Kringel bewegt sich zum ersten Komma Linie 185 mit Die gleiche Tooltip-Nachricht wie die Zeile in Zeile 184.

Dieser Code soll testen, ob S1.P0 größer als FC.P0 ist. Wenn wahr, dann verwende eine Formel. Wenn falsch, verwende die andere Formel.

Die temporäre Tabelle enthält eine eindeutige ID, einen NVAR für einen Kategorietitel und 18 Felder mit INT-Nummern.

Antwort

1

Sie forgott den Fall schließen, wenn Statmant mit Ende

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

Haben Sie Ihre Abfrage nicht in Details überprüft, aber gibt es kein "Ende" in der Case-Anweisung?

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. Ich habe stundenlang auf diesen Code gestarrt, und dank einer einzigen Augenpaare habe ich das ENDE visuell gesehen, bis Sie darauf hingewiesen haben, dass es fehlte. Vielen Dank! –

Verwandte Themen