2014-10-08 52 views
0

這是我想查詢:我想查詢Oracle數據庫爲獲得數以multpile情況下條款

SELECT DISTINCT(
    (select distinct (
     (SELECT COUNT(*) 
     FROM PROCESS 
     WHERE STARTDATE > sysdate - INTERVAL '7' DAY) - 
     (SELECT COUNT(*) 
     FROM PROCESS 
     WHERE STARTDATE > sysdate - INTERVAL '14' DAY AND 
      STARTDATE < sysdate - INTERVAL '7' DAY) 
)as c3 
    from process)/
    (SELECT (CASE WHEN COUNT(*)=0 THEN (
     SELECT (case WHEN COUNT(*)=0 THEN 1 ELSE COUNT(*) end) 
     FROM PROCESS 
     WHERE STARTDATE > SYSDATE - INTERVAL '7' DAY ) 
    ELSE COUNT(*) END) 
    FROM PROCESS 
    WHERE STARTDATE > SYSDATE - INTERVAL '14' DAY AND 
     STARTDATE < SYSDATE - INTERVAL '7' DAY) 
) AS ORDER_VOLUME FROM PROCESS; 

,但我得到這個錯誤:

ORA-00937: not a single-group group function 
00937. 00000 - "not a single-group group function" 
*Cause:  
*Action: 
Error at Line: 1 Column: 295 
可以

人幫助我這個查詢?

這是要我要

1)獲取時STARTDATE> SYSDATE的計數 - INTERVAL '14' 天和 STARTDATE < SYSDATE - INTERVAL '7' DAY, 2)如果計數爲0,則 獲得STARTDATE計數> SYSDATE - INTERVAL '14' 天和 STARTDATE < SYSDATE - INTERVAL '7' DAY, 別的組計數

如果在步驟2中檢索)的次數也爲0,則設定計數作爲1 否則設置檢索的計數

+1

請通過繪製問題來添加示例數據和結果 – 2014-10-08 09:02:52

+0

您應該首先分別執行兩個選擇(在'/'之前和之後),以便更好地瞭解哪個部分會導致錯誤 – 2014-10-08 09:28:49

+0

@Andreas我有問題的後半部分(在/) – unknown 2014-10-08 09:53:09

回答

0

這看起來像一個Oracle的bug。該查詢似乎在語法上是正確的。

但是,看起來你並沒有真正知道你在做什麼。在DISTINCT中這個語句看起來很奇怪,當你在表過程中人爲地重複記錄的數量時,這是毫無意義的。

這是您的查詢會做什麼,如果bug不會阻止這樣的:

select 
    (count_last_week - count_week_before_last_week)/
    case 
    when count_week_before_last_week > 0 then count_week_before_last_week 
    when count_last_week > 0 then    count_last_week 
    else          1 
    end as order_volume 
from 
(
    select 
    sum(case when startdate > sysdate - interval '7' day then 1 end) as count_last_week, 
    sum(case when startdate > sysdate - interval '14' day and startdate < sysdate - interval '7' day then 1 end) as count_week_before_last_week 
    from process 
); 

檢查,如果這是你真正想要的,並在必要時修改此查詢。

BTW:請注意,您有startdate > sysdate - interval '7' daystartdate < sysdate - interval '7' day但沒有startdate = sysdate - interval '7' day。 Plus:你是否考慮過時間,還是寧願使用trunc(startdate)和trunc(sysdate)?

0

這部分後「/」

SELECT (
**--**CASE WHEN COUNT()=0 THEN (
    SELECT (
    case WHEN COUNT()=0 THEN 1 
     ELSE COUNT() 
    end) 
FROM PROCESS 
WHERE STARTDATE > SYSDATE - INTERVAL '7' DAY) 
ELSE COUNT() 
END) 

你不覺得應該有一個選擇,我將其標記爲「 - 」你innser SQL沒有選擇這是錯誤的,或只是移除支架和嘗試像

SELECT 
CASE WHEN COUNT()=0 THEN (
    SELECT (
    case WHEN COUNT()=0 THEN 1 
     ELSE COUNT() 
    end) 
FROM PROCESS 
WHERE STARTDATE > SYSDATE - INTERVAL '7' DAY) 
ELSE COUNT() 
END 
FROM PROCESS** 
+0

類似於內部的SQL: SELECT(case WHEN COUNT()= 0 then 1 ELSE COUNT()end)FROM PROCESS WHERE STARTDATE> SYSDATE - INTERVAL '7'DAY 將其編輯爲 SELECT case WHEN COUNT()= 0 THEN 1 ELSE COUNT()END FROM FROM WHERE STARTDATE> SYSDATE - INTERVAL'7'DAY – 2014-10-08 09:23:35

+0

這是我想要的SELECT count case(* )= 0 then(SELECT case when COUNT(*)= 0 THEN 1 ELSE COUNT(* )結束FROM PROCESS WHERE STARTDATE> SYSDATE - INTERVAL'7'DAY)else count(*)end FROM PROCESS WHERE STARTDATE> SYSDATE - INTERVAL'14'DAY AND STARTDATE unknown 2014-10-08 09:43:13

相關問題