Этот запрос мне подходит. Вы группируете по устройству (и отделу) и подсчитываете номера телефонов. Затем, если ваша сгруппированная строка находится на Apple, вы отображаете количество, умноженное на 500; когда это строка группы Samsung, вы показываете, что показываете ее умноженную на 400; а еще умножить на сто.
Возможно, у СУБД есть проблемы с тем, чтобы увидеть, что она может сначала агрегировать, а затем оценить CASE WHEN
. Вот альтернативный способ написать то же самое. Пожалуйста, попробуйте, чтобы увидеть, работает ли это.
SELECT Dept, Device,
SUM(
CASE WHEN PhoneNumber IS NOT NULL AND Device = 'Apple' THEN 500
WHEN PhoneNumber IS NOT NULL AND Device = 'Samsung' THEN 400
WHEN PhoneNumber IS NOT NULL THEN 100
ELSE 0
END
) AS Savings
FROM TestTable
WHERE Active = 'No' OR Cancel = 1
GROUP BY Dept, Device
ORDER BY Dept, Device;