sql – 在此查询中将CASE WHEN列放入IS NULL的位置
发布时间:2020-12-12 07:01:48 所属栏目:MsSql教程 来源:网络整理
导读:我在将MS Access查询转换为SQL时遇到了一些问题: SELECT id,col1,col2,col3FROM table1LEFT OUTER JOIN table2ON table1.id = table2.idLEFT OUTER JOIN table3ON table1.id = table3.id 到目前为止一切都那么好,但这里是(CASE)部分,我被卡住了: CASE WHEN
我在将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声明在该字段之前缺少了一个.这就是为什么它不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |