2016-03-20 29 views
1

Üç olası sonucu olan bir CASE deyimine dayalı bir değer döndüren bir SQL deyimi yazmak istiyorum.CASE deyimi true olduğunda başka bir tablonun değerini döndürmek için SQL

1) sütun değeri sütun 'L0' ile başlar, o zaman tablo

2) iki sütun bir birleştirme döner 'C0' ile başlayan, sonra bir sütun (_PARENT_PROJECT_NUMBER değeri alır) o satırda ve bu değerin başka bir tabloda bulunup bulunmadığına bakın. Değilse, _PARENT_PROJECT_NUMBER değerini döndürün.

3) _PARENT_PROJECT_NUMBER, diğer tabloda yer alıyorsa, diğer tabloda "Rollup_Project_Mapping" sütununda "Rollup_Project" sütununda değeri döndürün.

Aşağıda yazdığım bildirimde, satır 12, "Rollup_Project_Mapping"."Rollup_Project" dışında başka bir tabloda, _PARENT_PROJECT_NUMBER diğer tabloda bulunursa diğer tablonun değerini döndürmesini istemiyorum.

ERROR: syntax error at or near "FROM" 
LINE 12:  FROM "Rollup_Project_Mapping"."Rollup_Project" 

kimse CASE ifadesinde bu kısmının doğru olduğunda diğer tablodaki değeri döndürmek nasıl biliyor mu: Hata iletisi?

SELECT 
CASE 
    WHEN LEFT("_PROJECT_NUMBER",2)='C0' THEN 
    '('||"_PROJECT_NUMBER"||') '||"_PROJECT_DESCRIPTION" 
    WHEN LEFT("_PROJECT_NUMBER",2)='L0' THEN 
    CASE 
     WHEN (SELECT "Rollup_Project" FROM "Project_Rollup_Mapping" WHERE "PA_ACCOUNTED_TEST"."_PARENT_PROJECT_NUMBER" = "Project_Rollup_Mapping"."Project") IS NOT NULL THEN 
     "Rollup_Project_Mapping"."Rollup_Project" 
    ELSE "_PARENT_PROJECT_NUMBER" 
    END 
END AS Rollup_Project2 
FROM "PA_ACCOUNTED_TEST"; 

cevap

3

Sen WHEN/THEN tabloların ve EXISTS sadece bir dizi kullanabilirsiniz: Ben orijinal SQL deyimi adapte

SELECT (CASE WHEN LEFT("_PROJECT_NUMBER",2) = 'C0' 
      THEN '('||"_PROJECT_NUMBER"||') '||"_PROJECT_DESCRIPTION" 
      WHEN LEFT("_PROJECT_NUMBER",2) = 'L0' AND 
        EXISTS (SELECT "Rollup_Project" FROM "Project_Rollup_Mapping" WHERE "PA_ACCOUNTED_TEST"."_PARENT_PROJECT_NUMBER" = "Project_Rollup_Mapping"."Project") 
        THEN (SELECT "Rollup_Project" FROM "Project_Rollup_Mapping" WHERE "PA_ACCOUNTED_TEST"."_PARENT_PROJECT_NUMBER" = "Project_Rollup_Mapping"."Project") 
      ELSE "_PARENT_PROJECT_NUMBER" 
     END) AS Rollup_Project2 
FROM "PA_ACCOUNTED_TEST"; 
+0

Teşekkürler! Mükemmel çalıştı! – christopheralan88

0

durumda herkes @Gordon Linoff Yanıta göre çalışır başka seçenek olarak istediği :

SELECT 
CASE 
    WHEN LEFT("_PROJECT_NUMBER",2)='C0' THEN 
    '('||"_PROJECT_NUMBER"||') '||"_PROJECT_DESCRIPTION" 
    WHEN LEFT("_PROJECT_NUMBER",2)='L0' AND (SELECT "Rollup_Project" FROM "Project_Rollup_Mapping" WHERE "PA_ACCOUNTED_TEST"."_PARENT_PROJECT_NUMBER" = "Project_Rollup_Mapping"."Project") IS NOT NULL THEN 
    (SELECT "Rollup_Project" FROM "Project_Rollup_Mapping" WHERE "PA_ACCOUNTED_TEST"."_PARENT_PROJECT_NUMBER" = "Project_Rollup_Mapping"."Project") 
    ELSE "_PARENT_PROJECT_NUMBER" 
END AS Rollup_Project2 
FROM "PA_ACCOUNTED_TEST"; 
İlgili konular