首页 > 解决方案 > 案例陈述支持

问题描述

我可以参考我之前的 CASE 声明吗?我知道代码是错误的,但我想做这样的事情:

SELECT
Distinct(trafficSource.campaign) AS Campaign,

Case 
  When (SUBSTR(trafficSource.campaign,10,4)) = 'news' then  'eNEWS'
  When (SUBSTR(trafficSource.campaign,23,4)) = 'news' then  'eNEWS'
  Else Null
End as **eNEWS_Flag**,

Case
  When **eNEWS_Flag** = 'eNEWS' then (SUBSTR(trafficSource.campaign,21,2)) Lang_Flag,

From Blah Blah 

WHERE eNEWS_Flag is NOT NULL

标签: sql

解决方案


鉴于 current子句,它消除了提议的表达式返回WHERE的所有行,您应该能够在不使用任何表达式的情况下对其进行重构。eNEWS_FlagNULLCASE

SELECT DISTINCT
  trafficSource.campaign AS Campaign,
  'eNEWS' as eNEWS_Flag,
  SUBSTR(trafficSource.campaign,21,2)) AS Lang_Flag,
From Blah Blah 
WHERE
  SUBSTR(trafficSource.campaign,10,4) = 'news'
  OR
  SUBSTR(trafficSource.campaign,23,4) = 'news'

SELECT但是在大多数(任何?)SQL 方言中,您不能在同一子句中引用表达式的列别名。也不在WHERE子句中,因为大多数引擎在评估WHERE子句之前评估SELECT子句。


推荐阅读