将caluse乘以Case语句

时间:2017-06-13 03:19:39

标签: sql oracle oracle11g

我的查询如下:

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。为什么呢?

1 个答案:

答案 0 :(得分: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

就个人而言,我避免使用嵌套,并使用更简单的语法

CASE WHEN x1 AND x2 .. WHEN x1 ... WHEN x2... ELSE...END