Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 带有case列的查询_Sql_Sql Server_Tsql_Case - Fatal编程技术网

Sql 带有case列的查询

Sql 带有case列的查询,sql,sql-server,tsql,case,Sql,Sql Server,Tsql,Case,在查询中,我有这样一列: case when X = 1 then case when Y <> 0 then YY else XX end else ZZ end as MyColumn 在另一列中,是否有方法检查上面引用MyColumn的列值,而不是重写case语句 我应该根据MyColumn值为另一列赋值 谢谢不,没有: 复制后续列中的逻辑 在派生表/内联视图中执行初始案例评估: SELECT aa.mycolumn, CASE

在查询中,我有这样一列:

case when X = 1 then
  case when Y <> 0 then YY else XX end
    else ZZ
end as MyColumn
在另一列中,是否有方法检查上面引用MyColumn的列值,而不是重写case语句

我应该根据MyColumn值为另一列赋值


谢谢

不,没有:

复制后续列中的逻辑 在派生表/内联视图中执行初始案例评估:

SELECT aa.mycolumn,
       CASE 
         WHEN aa.mycolumn = ? THEN ....
       END AS next_mycolumn_evaluation
  FROM (SELECT CASE
                 WHEN X = 1 THEN
                  CASE WHEN Y <> 0 THEN YY 
                    ELSE XX END
                 ELSE ZZ 
               END AS mycolumn
          FROM ...) aa

如果我理解正确,我可能不理解,假设X、Y、XX、YY和ZZ是此表中的其他列,您可以在此表上创建一个计算列,使用此表达式作为其公式

Alter Table TableName Add NewColumn 
   as Case when X = 1 then
       Case when Y <> 0 YY else XX end
       else ZZ end 

您可能可以使用子查询来完成。例如:

Select someTable.ID, someTable.A, someTable.B,
    case subT.myColumn = 0 then 'BLARG' else 'huh?' end As outerMyColumn
from someTable,
    (Select ID, case when X = 1 then
      case when Y <> 0 YY else XX end
        else ZZ
    end as MyColumn
    From someTable
    where someCondition) subT
where subT.ID = someTable.ID;
你可以这样写 当X=1且Y为0时,则为YY 当X=1且Y=0时,则为XX 其他ZZ结束 以支原体柱结束


这种情况只有一种。

不幸的是,我的查询是一个视图,因此我认为我必须复制逻辑。谢谢您的回答。@Opera:SQL Server允许在viewsAh中使用派生表/内联视图,很酷,我会尝试,但很抱歉,我不清楚您的代码。顺便说一下,我会用谷歌搜索内联视图,非常感谢。我知道了,谢谢!关于性能,这两种方法之间有着特殊的区别?@opeara:派生表/内联视图通常被称为子查询,但我不同意这个术语。检查上面的列值是什么意思。你能举个例子吗?