2012-09-05 47 views
6

Chúng tôi có 2 rất đơn giản câu SELECT:ORACLE SQL có được sự khác biệt của hai giá trị lấy từ 2 câu chọn

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

Chúng ta cần một cách để viết một câu lệnh SQL duy nhất mà sẽ nhận được sự khác biệt của các "giá trị" được trả về từ hai câu lệnh SQL này.

Chúng tôi đã thử những điều sau đây nhưng nó đã không thành công:

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

Bất kỳ đề nghị được đánh giá cao.

+1

Bạn có muốn chênh lệch số (miễn là cả hai SELECT chỉ trả về một hàng)? Hoặc bạn có muốn sự khác biệt thiết lập (tức là tất cả các giá trị trả về từ statement1 không được trả lại từ statement2)? –

+0

tôi cần số khác – Sanath

+2

Sau đó, bạn nên chấp nhận câu trả lời của trideceth12. –

Trả lời

15

chưa được kiểm tra nhưng nên làm việc:

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

Giả sử rằng bạn SELECT value đảm bảo sẽ trả về một giá trị duy nhất

+0

phải làm gì, nếu không có giá trị đơn lẻ? – BSeitkazin

+1

@Beezy Người hỏi hỏi về việc nhận được sự khác biệt giữa hai giá trị. Nếu lựa chọn của bạn nhận được nhiều hơn một giá trị, bạn cần thêm nhiều điều kiện hơn cho đến khi bạn chỉ nhận được các giá trị bạn dự định được bao gồm trong phép tính. – 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

Vui lòng thử này:

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

Dưới đây tuyên bố sho việc ULD cho trường hợp của bạn

(
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

Nếu bạn nghĩ rằng các truy vấn bên trong của bạn có thể cung cấp nhiều giá trị, sử dụng dưới đây

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 

TỪ kép;

Các vấn đề liên quan