2013-03-25 5 views
18

हाय बयान मैं बस का चयन करें और अच्छा काम करता है है:में चुनिंदा (Oracle)

select 'CARAT Issue Open' issue_comment, i.issue_id, i.issue_status, i.issue_title, i.ISSUE_summary ,i.issue_description, i.severity, 
gcrs.Area_name, gcrs.sector_name, 

substr(gcrs.stream_name,1,case when instr(gcrs.stream_name,' (')=0 then 100 else instr(gcrs.stream_name,' (')-1 end) ISSUE_DIVISION, 

case when gcrs.STREAM_NAME like 'NON-GT%' THEN 'NON-GT' ELSE gcrs.STREAM_NAME END as ISSUE_DIVISION_2 


from table(f_carat_issues_as_of('31/MAR/2013')) i 
inner join v_gcrs_with_stream gcrs on i.segment_id = gcrs.segment_id 

where UPPER(ISSUE_STATUS) like '%OPEN%' 

अब मैं दो कॉलम कॉल करना चाहते हैं: अगर वे नए कॉलम में बराबर हैं ISSUE_DIVISION और ISSUE_DIVISION_2

चाहिए मान 1 होना चाहिए यदि बराबर नहीं हैं 0,

मैं इसे कैसे कर सकता हूं?


मेरा पूरा कोड:

select 'CARAT Issue Open' issue_comment, i.issue_id, i.issue_status, i.issue_title, i.ISSUE_summary ,i.issue_description, i.severity, 
gcrs.Area_name, gcrs.sector_name, 

substr(gcrs.stream_name,1,case when instr(gcrs.stream_name,' (')=0 then 100 else instr(gcrs.stream_name,' (')-1 end) ISSUE_DIVISION, 

case when gcrs.STREAM_NAME like 'NON-GT%' THEN 'NON-GT' ELSE gcrs.STREAM_NAME END as ISSUE_DIVISION_2 


from table(f_carat_issues_as_of('31/MAR/2013')) i 
inner join v_gcrs_with_stream gcrs on i.segment_id = gcrs.segment_id 

where UPPER(ISSUE_STATUS) like '%OPEN%' and 

CASE WHEN ISSUE_DIVISION = ISSUE_DIVISION_2 THEN 
    CASE WHEN ISSUE_DIVISION is null then "Null Value found" 
    Else 1 End 
ELSE 0 END As Issue_Division_Result 

लेकिन मैं लाइन पर त्रुटि मिलती है: वरना 0 अंत Issue_Division_Result रूप

ORA-00920: अवैध संबंधपरक ऑपरेटर :(

+0

यह GCRS.STREAM_NAME के ​​लिए उचित मूल्यों को सही तरीके से संभाल नहीं करेगा, क्योंकि INSTR() उस मामले में पूर्ण लौटाता है। –

उत्तर

33
SELECT (CASE WHEN ISSUE_DIVISION = ISSUE_DIVISION_2 THEN 1 ELSE 0 END) AS ISSUES 
    -- <add any columns to outer select from inner query> 
    FROM 
( -- your query here -- 
    select 'CARAT Issue Open' issue_comment, ...., ..., 
      substr(gcrs.stream_name,1,case when instr(gcrs.stream_name,' (')=0 then 100 else instr(gcrs.stream_name,' (')-1 end) ISSUE_DIVISION, 
      case when gcrs.STREAM_NAME like 'NON-GT%' THEN 'NON-GT' ELSE gcrs.STREAM_NAME END as ISSUE_DIVISION_2 
    from .... 
    where UPPER(ISSUE_STATUS) like '%OPEN%' 
) 
WHERE... -- optional -- 
+0

THX !!! अब मैं समझता हूँ! – 4est

+0

आपका स्वागत है! मदद करने में खुशी। – Art

+1

यह सिर्फ मेरी शादी को बचाया। धन्यवाद। –

5

तो सरल आप केस कथन का उपयोग कर सकते हैं।

CASE WHEN ISSUE_DIVISION = ISSUE_DIVISION_2 THEN 
     CASE WHEN ISSUE_DIVISION is null then "Null Value found" //give your option 
     Else 1 End 
ELSE 0 END As Issue_Division_Result 
+0

यह 0 वापस आ जाएगा यदि दोनों मान शून्य हैं जो ओपी अपेक्षा करता/नहीं चाहता (ओपी पर मेरी टिप्पणी देखें)। –

+0

@FrankSchmitt मेरा संपादन देखें – Dhinakar

0

चर का उपयोग करें, ओरेकल एक संदर्भ के बिना उस संदर्भ में एसक्यूएल का समर्थन नहीं करता है। एक उचित नामित चर के साथ आपका कोड वैसे भी अधिक सुगम होगा।