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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...