2017-08-04 1 views
2

Hallo Ich versuche, eine Sicht in Oracle SQL Developer zu erstellen. Ich möchte, dass die Ansicht alles von raw_test mit einer neuen Spalte als 'Ausschlussgrund' ist, wobei der Ausschlussgrundwert 'Patient_ID_Missing' bzw. 'Duplicate_MRN' ist.Oracle With, Case Wenn Anweisung fehlt Schlüsselwort

With 
Dup_MRN AS 
    (SELECT * 
FROM raw_test 
    WHERE mrn IN ( SELECT mrn 
       FROM raw_test 
      GROUP BY mrn 
       HAVING COUNT (*) > 1)) 
Select raw_test.*, 
    case when raw_test.patient_ID_CDW is null then 'Patient_ID_Missing' 
    case when Dup_MRN.mrn is not null then 'Duplicate_MRN' 
    End as "Exclusion_reason" 
From raw_test    
Left join dup_mrn.mrn on raw_test.mrn = dup_mrn.mrn 

Als ich das laufen bekomme ich die Fehlermeldung „fehlende Stichwort“ aber ich kann nicht herausfinden, was genau fehlt mir.

Vielen Dank im Voraus für Sie

* Brilliant helfen! danke euch allen für die Hilfe, ich habe definitiv die zweite Fallklausel dort verpasst. Ich dachte, es wäre etwas Einfaches, du kannst stundenlang auf ein Kleefeld schauen, bevor du eins mit vier Blättern siehst:)

+3

Sie einen zusätzlichen 'case' haben, ist es' Fall, wenn „etwas“ und dann „etwas“, wenn ... ' – Lamak

+0

Wenn einer der folgenden Antworten Ihr Problem gelöst, fügen Sie es als akzeptierte Antwort markieren. – SandPiper

+0

Diese Nachricht wäre klarer gewesen, wenn sie "EXTRA KEYWORD" und nicht "FEHLTES KEYWORD" gesagt hätte. Ich nehme an, sie wollten, dass du das "ENDE" vor dem zweiten (aber nicht benötigten) CASE einfügst. – Hogan

Antwort

0

Du verwendest das case statement falsch. Es sollte das Format von

case 
    when exp1 then thing1 
    when exp2 then thing2 
    else default_thing 
end as field_name 

with up_mrn as (
    select 
    * 
    from 
    raw_test 
    where 
    mrn in (
     select 
     mrn 
     from 
     raw_test 
     group by 
     mrn 
     having count (*) > 1 
    ) 
) 
select 
    raw_test.* 
    , case 
    when raw_test.patient_id_cdw is null 
     then 'Patient_ID_Missing' 
    when dup_mrn.mrn is not null 
     then 'Duplicate_MRN' 
    else null 
    end as "Exclusion_reason" 
from 
    raw_test    
    left join dup_mrn.mrn 
    on raw_test.mrn = dup_mrn.mrn 
0

Sie sind falsch CASE-Anweisung.

SELECT raw_test.*, 
    CASE 
    WHEN raw_test.patient_ID_CDW IS NULL THEN 'Patient_ID_Missing' 
    WHEN Dup_MRN.mrn IS NOT NULL THEN 'Duplicate_MRN' 
    ELSE '' 
    END AS "Exclusion_reason"