2015-02-23 236 views
-1

我对SQL中的IF条件有一些疑问 是否可以在SQL查询中使用下一个语法?我真的有趣的有关声明SQL IF条件如果GROUP BY语句

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

哪个DBMS?什么是order_id,列或参数? (根据ANSI SQL,只有列名可以在GROUP BY子句中列出。) – jarlh 2015-02-23 13:01:35

回答

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

谢谢!这工程exelent! – volodymyr3131 2015-02-23 13:28:18

1

一组if条件,你不应该用group byselect *。在大多数数据库中,查询(通常)会被语法错误拒绝。

二,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语句。像这样的东西 -

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