Как сделать несколько действий в случае, когда тогда в sql? - PullRequest
0 голосов
/ 29 марта 2020

Я хочу сделать что-то вроде этого:

select sum(case ttt.ind = 1 then 1 else 0 end) from ttt

Я хочу добавить к этому запросу столбец с именем myresult, который указывает, равно ли значение ttt.istry 1.

Может быть, как:

select 
    sum(case ttt.ind = 1 then 1, ttt.istry as myresult else 0 end) 
from ttt

конечно, я получил ошибку ...

Как бы я это сделал?

Мои данные:

ttt.ind | ttt.istry
--------+----------
   1    |     0
   0    |     1
   1    |     1

и так далее ...

Ожидаемый результат:

ttt.ind | ttt.istry | myresult | sum
--------+-----------+----------+------
   1    |     0     |    0     |  2
   0    |     1     |   null   |  2
   1    |     1     |    1     |  2

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Ваш лог c немного сложен, но ваш набор результатов предлагает:

select ind, istry,
        (case when istry = 1 then 1
              when sum(istry) over (partition by ind) = 1 then 0
         end),
        sum(ttt.ind) over () as sum_ind
from ttt;
0 голосов
/ 29 марта 2020

Вы не говорите, какая база данных, поэтому я предполагаю, что она современная. Для этого вы можете использовать оконную функцию и предложение CASE.

Например:

select
  ind,
  istry,
  case when ind = 1 then istry end as myresult,
  sum(ind) over() as sum
from ttt

См. Живой пример на SQL Fiddle .

...