Sql 嵌套的CASE-ELSE-END语法错误
有人能告诉我为什么在最后一个ELSE语句中出现错误的语法吗Sql 嵌套的CASE-ELSE-END语法错误,sql,sql-server,Sql,Sql Server,有人能告诉我为什么在最后一个ELSE语句中出现错误的语法吗 SELECT CASE WHEN PolType = 'PKG' THEN CASE WHEN PkgDef & 1 = 1 THEN 'BA ' ELSE CASE WHEN PkgDef & 2 = 2 THEN 'BAT' ELSE CASE WHEN PkgDef & 4 = 4 THEN 'GS ' ELSE CASE WHEN PkgDef & 8
SELECT
CASE WHEN PolType = 'PKG' THEN
CASE WHEN PkgDef & 1 = 1 THEN 'BA ' ELSE
CASE WHEN PkgDef & 2 = 2 THEN 'BAT' ELSE
CASE WHEN PkgDef & 4 = 4 THEN 'GS ' ELSE
CASE WHEN PkgDef & 8 = 8 THEN 'DLR' ELSE
'ERR' END
ELSE
poltype
END AS 'PolType'
FROM Parallel_Test.dbo.PolicyG
WHERE rowid = (SELECT MAX(rowid) FROM Parallel_Test.dbo.policyg) - 10
不是测试,而是尝试:
SELECT CASE WHEN PolType <> 'PKG' THEN poltype
WHEN PkgDef & 1 = 1 THEN 'BA '
WHEN PkgDef & 2 = 2 THEN 'BAT'
WHEN PkgDef & 4 = 4 THEN 'GS '
WHEN PkgDef & 8 = 8 THEN 'DLR'
ELSE 'ERR'
END AS 'PolType'
FROM Parallel_Test.dbo.PolicyG
WHERE rowid = (SELECT MAX(rowid) FROM Parallel_Test.dbo.policyg) - 10
如果您正在使用Microsoft SQL Server,则可能正在尝试执行以下操作:
SELECT
CASE
WHEN PolType = 'PKG' THEN
CASE
WHEN PkgDef & 1 = 1 THEN 'BA '
WHEN PkgDef & 2 = 2 THEN 'BAT'
WHEN PkgDef & 4 = 4 THEN 'GS '
WHEN PkgDef & 8 = 8 THEN 'DLR'
ELSE 'ERR'
END
ELSE poltype
END AS 'PolType'
FROM Parallel_Test.dbo.PolicyG
WHERE rowid = (SELECT MAX(rowid) FROM Parallel_Test.dbo.policyg) - 10
如果我错误地解释了您的预期逻辑,请告诉我。这就是您的案例陈述目前正在实际执行的4层嵌套if 我在另一个“结尾”中补充说,您需要在陈述时更正该陈述。不过,我确实认为其他解决方案之一就是您所寻求的
CASE
WHEN PkgDef & 1 = 1 THEN 'BA '
ELSE CASE
WHEN PkgDef & 2 = 2 THEN 'BAT'
ELSE CASE
WHEN PkgDef & 4 = 4 THEN 'GS '
ELSE CASE
WHEN PkgDef & 8 = 8 THEN 'DLR'
ELSE 'ERR'
END
end
end
END AS 'PolType'
FROM Parallel_Test.dbo.PolicyG
WHERE rowid = (SELECT MAX(rowid) FROM Parallel_Test.dbo.policyg) - 10
这是针对MSSQL、MySQL还是什么?请告诉我们您使用的是什么SQL。SQL Server 2008此语句有4层嵌套的Case语句,这是您的意图吗?太好了,感谢所有回复者。非常感谢!