2012-09-05 19 views
6

से लिया गया दो मानों का अंतर मिलता है हम 2 बहुत सरल SELECT स्टेटमेंट्स है:Oracle SQL 2 का चयन करें बयान

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

हम एक तरह से एक भी एसक्यूएल बयान जो "मूल्य" के अंतर मिल जाएगा लिखने की ज़रूरत जो इन दो एसक्यूएल कथन से वापस आ गया है।

हम निम्नलिखित की कोशिश की, लेकिन यह सफल नहीं था:

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

कोई भी सुझाव अत्यधिक सराहना की है।

+1

क्या आप संख्यात्मक अंतर चाहते हैं (बशर्ते कि दोनों चयन केवल एक पंक्ति लौटाएं)? या आप सेट अंतर चाहते हैं (यानी कथन 1 से लौटाए गए सभी मान जो स्टेटमेंट 2 से वापस नहीं आये हैं)? –

+0

मुझे संख्यात्मक diff – Sanath

+2

की आवश्यकता है तो आपको trideceth12 के उत्तर को स्वीकार करना चाहिए। –

उत्तर

15

untested है लेकिन काम करना चाहिए:

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 

दोहरी से नीचे का उपयोग कर सकते हैं;

संबंधित मुद्दे