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