Как правило, один не находит в таблице два столбца, один из которых называется ON, а другой - OFF, потому что они, как правило, являются взаимоисключающими состояниями, и два столбца позволяют обоим быть True.Обычно все, что вам нужно, это один столбец с именем ON, который может быть установлен в False для обозначения выключенного состояния.Так что то, что здесь происходит с вашим столом, не совсем понятно.
Если «Вкл» и «Выкл» действительно являются взаимоисключающими состояниями, и вы просто сделали глупые вещи, то лучший способ получить результат-установить строки, которые находятся во включенном состоянии, и строки, которые находятся в нерабочем состоянии, - это использовать UNION.
select {desired columns for rows that are on), sum(value) as YourSum
where on=true
group by {group-by column(s)}
UNION
select {desired columns for rows that are off}, sum(value) as YourSum
where off=true
group by {group-by column(s)}
Вы также можете создать два постоянных представления, одно для включенных строк, а другое для выключенных строк иUNION выбирает их.
Если вы хотите разделить столбцы, используя описанный выше подход UNION, вы можете создать фиктивный столбец, подзапрос и передать суммы с помощью фиктивной функции агрегирования MAX ():
select name, max( OnSum) as OnSummed, max( OffSum) as OffSummed from
(
select name, sum(value) as OnSum, 0 as OffSum
from mytable
where on= true
group by name
union
select name, 0 as OnSum, sum(value) as OffSum
from mytable
where off=true
group by name
)
group by name