запрос с учетом столбца - PullRequest
       4

запрос с учетом столбца

4 голосов
/ 09 сентября 2010

В запросе у меня есть такой столбец:

case when X = 1 then
  case when Y <> 0 then YY else XX end
    else ZZ
end as MyColumn

Есть ли способ в другом столбце проверить вышеуказанное значение столбца, ссылающееся на MyColumn вместо переписывания оператора case?

Мне следует указать другой столбец на основе значения MyColumn.

Спасибо

Ответы [ 4 ]

3 голосов
/ 09 сентября 2010

Нет, не без:

  • дублирование логики в последующих столбцах
  • выполнение первоначальной оценки 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
    
0 голосов
/ 09 сентября 2010

Вы можете написать как тот случай, когда X = 1 и Y <> 0, то YY. Когда X = 1 и Y = 0, тогда XX или ZZ заканчиваются как MyColumn

, в этом случае есть только один случай.

0 голосов
/ 09 сентября 2010

Возможно, вы могли бы сделать это с подзапросами.Например:

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;
0 голосов
/ 09 сентября 2010

Если я вас правильно понимаю (а я не могу) (например, 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...