2015-02-23 3 views
-1

У меня есть вопрос о состоянии IF в SQL Можно ли использовать следующий синтаксис в SQL-запросе? I`m интересное, если условие в группе по заявлениюSQL IF условие, если оператор GROUP BY

"SELECT * FROM TABLE WHERE... IF(order_id !=0, GROUP BY order_id, GROUP BY other_field)" 
+0

Какая СУБД? Что такое order_id, столбец или параметр? (Согласно ANSI SQL только столбцы-имена могут быть перечислены в предложении GROUP BY.) – jarlh

ответ

1
SELECT * 
FROM TABLE 
GROUP BY case when order_id <> 0 
       then order_id 
       else other_field 
     end 
+0

Спасибо! Это работает превосходно! – volodymyr3131

1

Во-первых, вы не должны делать 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 заявления. Это просто упрощает работу, если типы полей не совпадают - вам не нужно иметь дело с такими вещами, как конвертировать из одного типа в другой.

0

Вы можете использовать инструкцию CASE. Somthing like this-

SELECT * 
FROM TABLE 
WHERE... 
GROUP BY CASE WHEN order_id !=0 THEN order_id 
ELSE other_field END;