簡體   English   中英

如何根據Oracle中的Case語句使用Group By?

[英]How do I use Group By based on a Case statement in Oracle?

我有一個SQL查詢,我使用Oracle CASE來比較日期列是否小於大於當前日期。 但是如何在GROUP BY -statement中使用CASE GROUP BY statement? 我想在每種情況下統計記錄。

例如

select
    (case
        when exp_date > sysdate then 1
        when exp_date <= sysdate then 2
        else 3
     end) expired, count(*)
from mytable
group by expired

但是我在嘗試這個時遇到錯誤: ORA-00904 有什么建議?

select
(case
    when exp_date > sysdate then 1
    when exp_date <= sysdate then 2
    else 3
 end) expired, count(*)
from mytable
group by (case
    when exp_date > sysdate then 1
    when exp_date <= sysdate then 2
    else 3
 end)

使用內聯視圖:

SELECT expired,
       count(*)
  FROM (SELECT (CASE
                   WHEN exp_date > SYSDATE THEN 1
                   WHEN exp_date <= SYSDATE THEN 2
                   ELSE 3
                 END) AS expired
          FROM mytable)
GROUP BY expired;

希望能幫助到你...

作為附加輸入,雖然它與此線程無關,但您也可以聚合case語句而不在group by子句中提及它。

SELECT
   WORK_ORDER_NUMBER,
   SUM(CASE WHEN STOCK_CODE LIKE 'xxxx' THEN STOCK_QUANTITY ELSE 0 END) AS TOTAL
FROM Table
GROUP BY WORK_ORDER_NUMBER;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM