使用括号包围CASE语句时出现TSQL语法错误

时间:2016-05-05 16:44:14

标签: tsql case

我有代码,我将记录插入临时表。它会生成以下错误: Msg 102,Level 15,State 1,Line 185 ','附近的语法不正确。 消息102,级别15,状态1,行186 'TI'附近的语法不正确。 信息102,第15级,状态1,第187行 'S1'附近的语法不正确。 消息156,第15级,状态1,第189行 关键字'as'附近的语法不正确。 信息156,第15级,状态1,第191行 关键字'as'附近的语法不正确。 消息156,第15级,状态1,第193行 关键字'as'附近的语法不正确。 消息156,第15级,状态1,第195行 关键字'as'附近的语法不正确。

(以下代码从我的代码的第178行开始:)  插入#Month18Result

def print_list(table):
    for line in table:
       print(str(line[0]) + " kms, $" + str(line[1]))

with open(input("Enter file name: ")) as f:
    table = []
    for line in f:
        line = line.rstrip().split(",")
        line[0] = int(line[0])
        line[1] = float(line[1])
        table.append(line)

    table.sort(key=lambda line: line[1])
    print_list(table)

如果我从CASE语句中删除了parens,则波形移动到第185行的第一个逗号,其中的工具提示消息与第184行的paren相同。

此代码用于测试S1.P0是否大于FC.P0。如果为true,则使用一个公式。如果为false,请使用其他公式。

临时表包含唯一ID,类别标题的NVAR,以及18个INT号字段。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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