2017-08-04 1 views
2

Salut J'essaie de créer une vue dans Oracle SQL Developer. Je voudrais que la vue soit tout de raw_test avec une nouvelle colonne comme 'Raison d'exclusion' où la valeur de raison d'exclusion est 'Patient_ID_Missing' et 'Duplicate_MRN respectivement.Oracle With, instruction Case When Mot-clé manquant

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 

Quand je lance ce je reçois l'erreur « mot-clé manquant », mais je ne peux pas comprendre exactement ce que je suis absent.

Merci à l'avance pour vous aider à

* Brillant! merci à tous pour votre aide, j'ai définitivement manqué la deuxième clause du cas. Je pensais que c'était quelque chose de simple, vous pouvez regarder un champ de trèfle pendant des heures avant d'en voir un avec quatre feuilles:)

+3

vous avez un 'case' supplémentaire, il est' cas où « quelque chose » puis « quelque chose » quand ... ' – Lamak

+0

Si l'une des réponses ci-dessous votre problème résolu, marquer s'il vous plaît comme la réponse acceptée. – SandPiper

+0

Ce message aurait été plus clair s'il disait "EXTRA KEYWORD" et non "MISSING KEYWORD". Je suppose qu'ils voulaient que vous mettiez le 'END' avant le 2e CAS (mais pas nécessaire ici). – Hogan

Répondre

0

Vous utilisez incorrectement case statement. Il doit avoir le format de

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

Vous utilisez l'instruction CASE incorrectement.

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"