我的查询如下:
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 :(得分: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