2013-03-25 32 views
18

Merhaba deyimi ben sadece seçmek ve büyük işler varsa:select (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%' 

Şimdi iki sütun çağırmak istiyorum: yeni sütunlarda eşitse ISSUE_DIVISION ve ISSUE_DIVISION_2

gerektiği Eşit değilse, değer 1 olmalıdır 0,

nasıl yapabilirim?


benim tam kodu:

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 

ama on line hatayı alıyorum: Issue_Division_Result olarak BAŞKA 0 END

ORA-00920: geçersiz ilişkisel operatör :(

+0

Bu durum, INSTR() bu durumda NULL değerini döndürdüğünden, GCRS.STREAM_NAME için NULL değerleri düzgün işlemez. –

cevap

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 !!! şimdi anlıyorum! – 4est

+0

Bir şey değil! Yardım etmekten memnun oldum. – Art

+1

Bu sadece evliliğimi kurtardı. Teşekkürler. –

5

Çok basit case deyimini burada bulabilirsiniz

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

Her iki değer de, OP'nin beklediği/istemediği (neyi OP'le ilgili yorumuma bakın) null ise, bu 0'a döner. –

+0

@FrankSchmitt benim düzenle – Dhinakar

0

Değişkeni kullanın, Oracle bu bağlamda SQL'i INTO olmadan desteklemez. Düzgün olarak adlandırılmış bir değişken ile kodunuz zaten daha okunaklı olacaktır.