2017-06-13 68 views
0

我有一個查詢,如下所示:乘法Case語句在caluse

SELECT s.samplename, 
     s.sampletype, 
     s.specimancateg, 
     s.panel, 
     s.plateid, 
     s.status, 
     s.tarikh, 
     s.sampletype2, 
     s.geneticanalyzer, 
     s.positive, 
     s.negative, 
     s.allelicladder, 
     s.kitname, 
     UD1a.allel, 
     UD2a.allel 
FROM samples s 
     INNER JOIN ud1 UD1a 
       ON s.samplename = UD1a.samplename 
     INNER JOIN ud2 UD2a 
       ON s.samplename = UD2a.samplename 
WHERE (CASE 
      WHEN (Regexp_like(UD2a.allel, '(.*1|.*2|.*3|.*4){4}', 'n')) THEN ( 
      CASE 
      WHEN 
     Regexp_count(UD2a.allel, ',') + 1 != 4 THEN 0 
      ELSE 
      1 
      END) 
     END) + (CASE 
        WHEN (Regexp_like(UD1a.allel, '(.*1){1}', 'n')) THEN ( 
        CASE 
         WHEN 
        Regexp_count(UD1a.allel, ',') + 1 != 1 THEN 0 
        ELSE 1 
        END) 
        END) >= 1; 

如果我有兩個樣本是這樣的:

UD1:  
|SampleName|Allel  
|F1  |1  
|F2  |1,2,3,4 
UD2:  
|SampleName|Allel  
|F1  |1  
|F2  |1,2,3,4  

這是我的理解,結果應該包含兩個樣本,但我只得到samlpe F2。爲什麼?

+0

@toha感謝您的編輯。 – user4274779

回答

2

我認爲你缺少你的外CASE語句ELSE選項,所以您要NULL添加到一個號碼,它會失敗,無論

也就是說,你有什麼樣

CASE WHEN x1 THEN CASE WHEN x3 THEN 0 ELSE 1 END END 

但需要像

CASE WHEN x1 THEN CASE WHEN x3 THEN 0 ELSE 1 END ELSE ? END 

就個人而言,我會避免嵌套和與

01一個簡單的語法去
CASE WHEN x1 AND x2 .. WHEN x1 ... WHEN x2... ELSE...END 
+0

非常感謝!這是失蹤的其他人 – user4274779