从同一个表检查不同字段的SQL案例

时间:2013-04-10 13:14:23

标签: sql db2 case

我有以下问题: 我有一个包含案例部分的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未失败时显示值。

我总是误以为=应该是连贯的......但这在我看来没有意义。

任何想法??

这是你所有的帮助。

4 个答案:

答案 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,