2017-06-13 63 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