有了這樣的表:如何在某些情況下在兩個字段值之間切換?
id doc_before doc_after
0 100
1 167 153
2 132
我想要得到的doc_after
是否存在其他獲得doc_before
。
如何做到這一點?
我想是這樣的結果:
0 100
1 153
2 132
有了這樣的表:如何在某些情況下在兩個字段值之間切換?
id doc_before doc_after
0 100
1 167 153
2 132
我想要得到的doc_after
是否存在其他獲得doc_before
。
如何做到這一點?
我想是這樣的結果:
0 100
1 153
2 132
您可以使用CASE
聲明。這是受支持的Informix語法。
SELECT ID, CASE WHEN nvl(doc_after,'') <> '' THEN doc_after ELSE doc_before END AS doc
, CASE WHEN nvl(doc_after) <> '' THEN 'doc_after' ELSE 'doc_before' END AS camefrom
FROM yourtable
您可能需要將'IS NOT NULL'添加到條件以滿足NULL值。 – 2013-02-16 16:30:08
非常感謝。我節省了我的時間:D – 2013-02-16 16:35:36
,但有什麼方法可以知道它是來自'doc_after'還是'doc_before' – 2013-02-16 16:38:41
SELECT id
, COALESCE(doc_after, doc_before) AS the_doc
FROM the_table
;
非常感謝,但我在'informix'中找不到'COALESCE' – 2013-02-16 16:40:40
它是一個ANSI函數,可以在sybase中有其他名稱。 (在Oracle它被稱爲IFNULL(),IIRC) – wildplasser 2013-02-16 16:44:38
'選擇task_code ,NVL(pdf_column,DB_NAME)AS the_doc FROM df1task ;' 這工作我,但不能確定數據來自哪個領域,從 – 2013-02-16 17:02:11
更慣用的使用的情況下會避免使用NVL:
SELECT ID,
CASE WHEN doc_after IS NULL THEN doc_before ELSE doc_after END AS doc_number,
CASE WHEN doc_after IS NULL THEN 'B' ELSE 'A' END AS doc_source
FROM AnonymousTable;
顯然編碼 'A' 爲 '後' 和 'B' '前' 是可以改變以滿足您的需求。
你想在sql或vb/c#中使用這個嗎? – 2013-02-16 16:24:55
另外,你有什麼嘗試? – 2013-02-16 16:25:32
我想'sql',但是如果沒有辦法,我想''linq'中的某種方式 – 2013-02-16 16:26:15