SQL IF条件如果GROUP BY语句
问题描述:
我对SQL中的IF条件有一些疑问 是否可以在SQL查询中使用下一个语法?我真的有趣的有关声明SQL IF条件如果GROUP BY语句
"SELECT * FROM TABLE WHERE... IF(order_id !=0, GROUP BY order_id, GROUP BY other_field)"
答
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
答
一组if条件,你不应该用group by
做select *
。在大多数数据库中,查询(通常)会被语法错误拒绝。
二,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
声明。如果字段的类型不一样,这就更容易了 - 您不必处理诸如如何从一种类型转换为另一种类型的事情。
答
您可以使用CASE语句。像这样的东西 -
SELECT *
FROM TABLE
WHERE...
GROUP BY CASE WHEN order_id !=0 THEN order_id
ELSE other_field END;
哪个DBMS?什么是order_id,列或参数? (根据ANSI SQL,只有列名可以在GROUP BY子句中列出。) – jarlh 2015-02-23 13:01:35