2012-09-05 75 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;