Sql 嵌套的CASE-ELSE-END语法错误

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

有人能告诉我为什么在最后一个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 = 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语句,这是您的意图吗?太好了,感谢所有回复者。非常感谢!