ivo*_*tux 9 sql null ms-access case
我在将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
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但这里是我被卡住的(CASE)部分:
CASE WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4
Run Code Online (Sandbox Code Playgroud)
我知道上面这行不起作用,但希望它能暗示我正在努力实现的目标.谢谢!
更新:到目前为止的所有建议都导致"关键字'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
Run Code Online (Sandbox Code Playgroud)
Mos*_*cho 21
试试这个:
CASE WHEN table3.col3 IS NULL THEN table2.col3 ELSE table3.col3 END as col4
Run Code Online (Sandbox Code Playgroud)
本as col4应该在CASE语句的结束.还要注意你也错过了END.
另一个可能更简单的选择是:
IIf([table3.col3] Is Null,[table2.col3],[table3.col3])
Run Code Online (Sandbox Code Playgroud)
只是为了澄清,MS Access不支持COALESCE.如果那将是最好的方式.
根本问题变更后编辑:
要将查询转换为SQL Server,您可以使用COALESCE(因此在技术上也可以回答):
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,
COALESCE(dbo.EU_Admin3.EUID, dbo.EU_Admin2.EUID)
FROM dbo.AdminID
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您的CASE声明,在该字段之前丢失了.这就是为什么它不起作用.