如何在查询中避免使用CTE并实现相同结果?附示例表
嘿,这事儿超简单,你完全不用依赖CTE就能得到一模一样的结果。核心思路就是把CTE里的逻辑直接整合到主查询里就行,毕竟原CTE只是帮你把COALESCE的结果起了个别名而已。
方案一:直接复用表达式(最直观)
你可以直接在SELECT和WHERE里都使用COALESCE(col1, col2, col3),写法如下:
SELECT COALESCE(col1, col2, col3) AS result FROM #Temp WHERE COALESCE(col1, col2, col3) IS NOT NULL
这种写法虽然重复了一次表达式,但胜在简单易懂,对于这种短表达式来说完全没毛病,你的测试数据会正确返回'W'。
方案二:用CROSS APPLY避免重复写表达式(适合复杂场景)
如果你不想重复写COALESCE(比如表达式很长的时候),可以用CROSS APPLY来一次性定义这个计算逻辑,然后在查询里引用:
SELECT ca.result FROM #Temp CROSS APPLY (SELECT COALESCE(col1, col2, col3) AS result) ca WHERE ca.result IS NOT NULL
这个方式和CTE的作用类似,但不属于CTE范畴,同样能达到你的需求。
两种方案都能和原CTE查询得到完全一致的结果,选哪种就看你个人习惯和实际场景啦。
内容的提问来源于stack exchange,提问作者tylkonachwile
相关产品推荐
相关产品推荐

