Во-первых, вы не должны делать select *
с group by
. Запрос будет (обычно) отклонен с синтаксической ошибкой в большинстве баз данных.
Во-вторых, стандарт SQL - case
.
Может быть, вы хотите что-то вроде этого:
select (case when order_id != 0 then order_id end) as order_id,
(case when order_id = 0 then other_field end) as other_field,
count(*)
from table t
group by (case when order_id != 0 then order_id end),
(case when order_id = 0 then other_field end);
Обратите внимание, что я разделить логику на две case
заявления. Это просто упрощает работу, если типы полей не совпадают - вам не нужно иметь дело с такими вещами, как конвертировать из одного типа в другой.
Какая СУБД? Что такое order_id, столбец или параметр? (Согласно ANSI SQL только столбцы-имена могут быть перечислены в предложении GROUP BY.) – jarlh