微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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声明在该字段之前缺少了一个.这就是为什么它不起作用.

原文地址:https://www.jb51.cc/mssql/77193.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐