sql别名在CASE语句中使用的列名

San*_*tha 5 sql-server-2008

我有一个SQL查询,如下所示,

select Site,DataSource,
(SELECT CASE 
   WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
   ELSE 'SameOperator' 
  END) AS OperatorScenario,

  (SELECT CASE 
   WHEN OperatorScenario = 'ChangeOperator' THEN '1' 
   ELSE '022' 
  END) AS OperatorScenario2
from tablename
Run Code Online (Sandbox Code Playgroud)

当我执行此查询时,我将异常作为无效的列名称OperatorScenario.所以我试着在第二个查询中使用别名中的单个代码,如下所示,

(SELECT CASE 
   WHEN 'OperatorScenario' = 'ChangeOperator' THEN '1' 
   ELSE '022' 
  END) AS OperatorScenario2
Run Code Online (Sandbox Code Playgroud)

所以它总是执行其他部分.请给我一些建议.关心sangeetha

lc.*_*lc. 7

主要问题是您无法在同一查询中引用别名.你也有括号和一个额外的SELECT关键字,看起来像一个子查询,我不相信你想要的(你没有一个FROM条款).

您可以再次复制整个内容(在此过程中修复查询):

SELECT Site, DataSource,
    CASE 
       WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
       ELSE 'SameOperator' 
    END AS OperatorScenario,

   CASE 
       WHEN 
           CASE 
               WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
               ELSE 'SameOperator' 
           END = 'ChangeOperator' THEN '1' 
       ELSE '022' 
  END AS OperatorScenario2
from tablename
Run Code Online (Sandbox Code Playgroud)

或者,简化:

SELECT Site, DataSource,
    CASE 
       WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
       ELSE 'SameOperator' 
    END AS OperatorScenario,

   CASE 
       WHEN DataSource = 'RFQ' THEN '1' 
       ELSE '022' 
   END AS OperatorScenario2
from tablename
Run Code Online (Sandbox Code Playgroud)

或者使用CTE(再次修复您的查询):

WITH cte AS
(
    SELECT Site, DataSource,
    CASE 
       WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
       ELSE 'SameOperator' 
    END AS OperatorScenario,
    FROM tablename
)
SELECT Site, DataSource, OperatorScenario,
    CASE 
        WHEN OperatorScenario = 'ChangeOperator' THEN '1' 
        ELSE '022' 
    END AS OperatorScenario2
FROM cte
Run Code Online (Sandbox Code Playgroud)