1

我有以下问题:我有一个包含 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 没有失败时显示值。

我总是错误地认为 = 应该是 concat .. 但这在我看来没有意义。

有任何想法吗??

这就是你所有的帮助。

4

4 回答 4

2

您缺少THEN该子句的一部分WHEN,并指定了可以指定值的条件:

case h.value
when '' THEN NULL
else h.diag end
于 2013-04-10T13:19:36.653 回答
2

你也可以用你的表达式在不同的地方写一个case语句,即

SELECT CASE WHEN X = 1 THEN 'Y' WHEN X = 2 THEN 'Z' 

我认为你想要做的更像是这样的:

SELECT CASE WHEN h.value = '' THEN h.diag end
于 2013-04-10T13:20:36.813 回答
2

使用另一种形式的case语句,它没有指定您要查看的列:

select case 
          when column1 = 2 then 'Foo'
          when other_column = 'blah' then 'Bar'
       end
    from table

using 的问题case column1 when...在于它隐式地与column1每个when子句进行比较。然后,您不能在其中包含与其他列的比较。

于 2013-04-10T13:21:29.810 回答
1

好的,我知道了....

在第二种情况之后,必须删除“h.diag”....

所以它是

    case 
    when h.value = ''  then null
    else h.diag end
    as diag1,
于 2013-04-10T13:21:21.910 回答