用case列查询

时间:2010-09-08 20:18:16

标签: 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值来评估另一列。

由于

4 个答案:

答案 0 :(得分:3)

不,不是没有:

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

    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
    

答案 1 :(得分:0)

如果我理解正确,(我可能没有),(假设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 

答案 2 :(得分:0)

你可以用子查询来做。例如:

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;

答案 3 :(得分:0)

你可以这样写 当X = 1且Y&lt; 0然后是YY      当X = 1且Y = 0时,则为XX     否则ZZ结束 结束为MyColumn

这只有一个案例。