我有以下问题: 我有一个包含案例部分的select语句。直到那里很容易问题是案例包括检查同一个表中的另一个字段。
select h.id,
case h.value
when 'P' then 'test'
when '' then 'failed'
when 'D' then 'passed'
else null end
as info,
b.text,
case h.diag
when h.value = '' [or 'failed' not sure tried both and didn't work]
else h.diag end
as diag1, h.date from valuetab h, texttab b where h.id=b.id
我希望h.diag仅在h.value未失败时显示值。
我总是误以为=应该是连贯的......但这在我看来没有意义。
任何想法??
这是你所有的帮助。
答案 0 :(得分:2)
您缺少THEN
子句的WHEN
部分,并指定了可以指定值的条件:
case h.value
when '' THEN NULL
else h.diag end
答案 1 :(得分:2)
你也可以在不同的地方写一个case语句,例如
SELECT CASE WHEN X = 1 THEN 'Y' WHEN X = 2 THEN 'Z'
我认为你想做的事情更像是这样:
SELECT CASE WHEN h.value = '' THEN h.diag end
答案 2 :(得分:2)
使用另一种形式的case
语句,该语句未指定您要查看的列:
select case
when column1 = 2 then 'Foo'
when other_column = 'blah' then 'Bar'
end
from table
使用case column1 when...
的问题在于它隐式地将column1
与每个when
子句进行比较。然后,您无法将比较包含在其中的其他列中。
答案 3 :(得分:1)
好的,明白了......
在第二种情况之后必须删除“h.diag”....
所以它是
case
when h.value = '' then null
else h.diag end
as diag1,