2012-09-05 76 views
6

檢索兩個值的差異,我們有2個非常簡單的SELECT語句:ORACLE SQL得到2個select語句

SELECT value from table where date between DATE1 and DATE2 
SELECT value from table where date between DATE3 and DATE4 

我們需要一種方法來寫一個SQL語句,將獲得「價值」的區別這是從這兩個SQL語句返回的。

我們試過以下,但沒有成功:

SELECT value from table where date between DATE1 and DATE2 
minus 
SELECT value from table where date between DATE3 and DATE4 

任何建議高度讚賞。

+1

你想要數字的區別(前提是兩個SELECT只返回一行)?或者你是否想要設置差異(即從statement1返回的所有值不是從statement2返回的)? –

+0

我需要數字差異 – Sanath

+2

然後你應該接受trideceth12的答案。 –

回答

15

未經測試,但應該工作:

SELECT 
    (SELECT value from table where date between DATE1 and DATE2) - 
    (SELECT value from table where date between DATE3 and DATE4) 
FROM dual; 

假設你SELECT value是保證返回一個值

+0

如果沒有單個值,該怎麼辦? – BSeitkazin

+1

@Beezy提問者詢問了解兩個值之間的區別。如果您的選擇每個都有多個值,則需要添加更多條件,直到您僅獲得您計劃包含在計算中的值。 – jsj

2
SELECT value FROM TBL WHERE date BETWEEN DATE1 and DATE2 
AND value NOT IN (SELECT value FROM TBL WHERE date BETWEEN DATE3 AND DATE4) 
1

請試試這個:

SET SERVEROUTPUT ON 
DECLARE 
V_FIRST NUMBER := 0; 
V_SECOND NUMBER := 0; 
BEGIN 
    SELECT value into V_FIRST from table where rownum=1 and date between DATE1 and DATE2; 
    SELECT value into V_SECOND from table where rownum=1 and date between DATE3 and DATE4; 

    DBMS_OUTPUT.PUT_LINE (V_FIRST-V_SECOND); 
END; 
1
(
SELECT value from table where date between DATE1 and DATE2 
minus 
SELECT value from table where date between DATE3 and DATE4 
) 
union all 
(
SELECT value from table where date between DATE3 and DATE4 
minus 
SELECT value from table where date between DATE1 and DATE2 
) 
1

下面的語句笑對於你的情況ULD工作

(
SELECT value from table where date between DATE3 and DATE4 
minus 
SELECT value from table where date between DATE1 and DATE2 
) 
union 
(
SELECT value from table where date between DATE1 and DATE2 
minus 
SELECT value from table where date between DATE3 and DATE4 
) 
2

如果你覺得你內心的疑問可以給多個值,使用下面

SELECT 
(SELECT sum(value) from table where date between DATE1 and DATE2) - 
(SELECT sum(value) from table where date between DATE3 and DATE4) as answer 

FROM DUAL;