2015-02-23 121 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;