2015-09-08 70 views
0

我有一些可能或可能有或沒有空值的列的結果集。我想要第一個非空結果大於1,那麼在合併我的列時添加此次要條件的最佳方式是什麼?有額外條件的MySQL合併

例如

result: 
col1 col2 col3 
1 null 2 
null 1  3  
null null 4 

回報2 3 4

回答

3

lad2025的答案是正確的,你有一個,如果有爲每列。但是,因爲你必須有這些IF函數,無論如何,你不妨做

SELECT IF(col1>1, col1, if(col2>1, col2, if (col3>1, col3, null))) 

或類似

SELECT CASE WHEN col1>1 THEN col1 
     WHEN col2>1 THEN col2 
     WHEN col3>1 THEN col3 
     ELSE null END 

任何一項都將是一個小更高效,更需要較少的代碼比使用合併,因爲那麼你仍然必須使用,如果在任一列空出1的任何值

+0

您不能使用多個ELSE,也不需要最後一個ELSE,默認情況下會返回null。 –

+0

@JuanCarlosOropeza對於多餘的ELSE而言,你是對的,這是一場腦呃逆。糾正。但是我留下空,因爲我總是發現更可讀。 – AgapwIesu

3
SELECT COALESCE(IF(col1>1,col1, NULL), IF(col2>1, col2, NULL), IF(col3>1, col3, NULL)) 
FROM tab 
+0

如果我想這個擴展至數列將我要補充的,如果每個列? –

+0

是的,你需要添加它們 – lad2025

+0

@MiloHou你應該重新設計你的表,如果有很多這樣的類似的列。它們應該可能是一個新表格,每個值都有一個單獨的行。 – Barmar

2

可以使用NULLIF

SELECT COALESCE(
     NULLIF(col1, 1), 
     NULLIF(col2, 1), 
     NULLIF(col3, 1)) 

SQL FIDDLE

0
SELECT CASE 
      WHEN COL1 IS NOT NULL and COL1 > 1 THEN COL1 
      WHEN COL2 IS NOT NULL and COL2 > 1 THEN COL2 
      WHEN COL3 IS NOT NULL and COL3 > 1 THEN COL3 
     END 
+1

你不測試它們是否大於1. – Barmar

+0

@Barmar謝謝。現在好多了? –

+0

如果您正在檢查> 1 – AgapwIesu

2

您可以用單一CASE語句做到這一點:

SELECT CASE WHEN IFNULL(col1, 0) > 1 THEN col1 
      WHEN IFNULL(col2, 0) > 1 THEN col2 
      WHEN IFNULL(col3, 0) > 1 THEN col3 
     END 
FROM mytable 

的情況下,也可以寫爲:

  WHEN colN IS NOT NULL AND colN > 1 THEN colN 
+0

如果您測試> 1,則不需要測試null – AgapwIesu