Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 用于CASE语句的sql别名列名_Sql Server 2008 - Fatal编程技术网

Sql server 2008 用于CASE语句的sql别名列名

Sql server 2008 用于CASE语句的sql别名列名,sql-server-2008,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

我有一个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
(SELECT CASE 
   WHEN 'OperatorScenario' = 'ChangeOperator' THEN '1' 
   ELSE '022' 
  END) AS OperatorScenario2
当我执行此查询时,得到的异常为无效列名运算符Scenario。所以我在第二次查询中尝试在别名中使用单个代码,如下所示

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
(SELECT CASE 
   WHEN 'OperatorScenario' = 'ChangeOperator' THEN '1' 
   ELSE '022' 
  END) AS OperatorScenario2
所以它总是执行其他部分。请给我一些建议。 当做
sangeetha

主要问题是不能在同一查询中引用别名。此外,还有括号和一个额外的
SELECT
关键字,使它看起来像是一个子查询,而我认为您并不打算这样做(您没有
FROM
子句)

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

或者,简化:

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

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


您无法在此查询中访问同一级别的别名,请使用子查询或cte:

WITH cte 
     AS (SELECT site, 
                datasource, 
                CASE 
                  WHEN datasource = 'RFQ' THEN 'ChangeOperator' 
                  ELSE 'SameOperator' 
                END AS OperatorScenario 
         FROM   dbo.tablename) 
SELECT site, 
       datasource, 
       operatorscenario, 
       CASE 
         WHEN operatorscenario = 'ChangeOperator' THEN '1' 
         ELSE '022' 
       END AS OperatorScenario2 
FROM   cte 

请注意,我还删除了额外的Paranthese,并在
案例中选择了

我在开始时设置了别名,如下所示:

SELECT [ALIAS] = CASE....
你的建议是:

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

   [OperatorScenario2] = CASE 
       WHEN DataSource = 'RFQ' THEN '1' ELSE '022' 
   END
from tablename