我在将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 WHEN table3.col3 IS NULL THEN table2.col3 AS col4 ELSE table3.col3 as col4

我知道上面的行不起作用,但希望它能暗示我正在尝试完成的任务。谢谢!

更新:到目前为止,所有建议都导致了“关键字'AS'附近的语法不正确”错误,因此也许我还缺少其他内容。在实际查询之下。问题是我们有两个表,分别为with和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.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

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

09-26 23:17
查看更多