sql – 在此查询中将CASE WHEN列放入IS NULL的位置

前端之家收集整理的这篇文章主要介绍了sql – 在此查询中将CASE WHEN列放入IS NULL的位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在将MS Access查询转换为sql时遇到了一些问题:
SELECT id,col1,col2,col3
FROM table1

LEFT OUTER JOIN table2
ON table1.id = table2.id

LEFT OUTER JOIN table3
ON table1.id = table3.id

到目前为止一切都那么好,但这里是(CASE)部分,我被卡住了:

CASE WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4

我知道上面这行不起作用,但希望它能暗示我正在努力实现的目标.谢谢!

更新:到目前为止的所有建议都导致“关键字’AS’附近的语法不正确”错误,所以也许还有其他我缺少的东西.下面是实际查询.问题是我们有两个表,都有和EUID列.如果dbo.EU_Admin3.EUID不为NULL,则它在连接中优先.如果dbo.EU_Admin3.EUID为NULL,请改用dbo.EU_Admin2.EUID.希望澄清一下.

SELECT dbo.AdminID.CountryID,dbo.AdminID.CountryName,dbo.AdminID.RegionID,dbo.AdminID.[Region name],dbo.AdminID.DistrictID,dbo.AdminID.DistrictName,dbo.AdminID.ADMIN3_ID,dbo.AdminID.ADMIN3 
(CASE WHEN dbo.EU_Admin3.EUID IS NULL THEN dbo.EU_Admin2.EUID ELSE dbo.EU_Admin3.EUID END AS EUID)
FROM dbo.AdminID 

LEFT OUTER JOIN dbo.EU_Admin2
ON dbo.AdminID.DistrictID = dbo.EU_Admin2.DistrictID

LEFT OUTER JOIN dbo.EU_Admin3
ON dbo.AdminID.ADMIN3_ID = dbo.EU_Admin3.ADMIN3_ID

解决方法

试试这个:
CASE WHEN table3.col3 IS NULL THEN table2.col3 ELSE table3.col3 END as col4

as col4应该在CASE结尾处声明.另请注意,您也错过了END.

另一个可能更简单的选择是:

IIf([table3.col3] Is Null,[table2.col3],[table3.col3])

只是为了澄清,MS Access不支持COALESCE.如果那将是最好的方式.

根本问题改变后编辑:

要将查询转换为sql Server,您可以使用COALESCE(因此它在技术上也得到了回答):

SELECT dbo.AdminID.CountryID,dbo.AdminID.ADMIN3,COALESCE(dbo.EU_Admin3.EUID,dbo.EU_Admin2.EUID)
FROM dbo.AdminID

顺便说一句,您的CASE声明在该字段之前缺少了一个.这就是为什么它不起作用.

猜你在找的MsSQL相关文章