2013-04-10 65 views
1

我有以下問題: 我有一個包含case部分的select語句。直到那裏很容易的問題是,案件包括對同一個表中的另一個字段的檢查。不同字段的SQL案例從同一張表中檢查

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的錯誤..但這在我眼中是沒有意義的。

任何想法??

這就是你的全部幫助。

回答

2

你也可以寫你的表達case語句在不同的地方,即

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

我想你想要做的是更多的東西是這樣的:

SELECT CASE WHEN h.value = '' THEN h.diag end 
2

你缺少WHEN條款的THEN一部分,並指定在那裏你可以指定一個值的條件:

case h.value 
when '' THEN NULL 
else h.diag end 
+0

是啊不知道它沒有複製.... sry,但是在那裏:-) – Thevagabond 2013-04-10 13:22:21

+0

這是語法錯誤。當你在'CASE '中指定一個表達式時,你可以在'WHEN'中有另一個表達式作爲值。 http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0005646.htm – 2013-04-10 13:23:43

+0

@CodeMagician你說得對,我發現缺少'then',但錯過了不允許條件的「簡單」WHEN子句中的條件。謝謝。 – dasblinkenlight 2013-04-10 13:26:07

1

好了吧....

第二情況下, 「h.diag」 必須拆除後....

所以它是

case 
    when h.value = '' then null 
    else h.diag end 
    as diag1, 
2

使用其它形式的case聲明,不指定你想看看在列:

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

問題使用case column1 when...是它隱含COMPAR每個when條款。那麼你不能在其中包含一些其他列的比較。

相關問題