Простой метод использует арифметику c:
select sum(loyal * grandtotal) as loyal_grandtotal,
sum( (1 - loyal) * grandtotal) as notloyal_grandtotal
from t
where loyal in (1, 0);
Более общее решение заключается в использовании выражения case
. Однако, если у вас есть флаги 0/1, они очень легко вписываются в арифметические c вычисления - по причине, почему они предпочтительнее, скажем, строковых флагов.