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