2012-10-24 54 views
13

我需要查詢表,並選擇4列的值的3。我需要比較第三列和第四列的值並選擇較大的值。比較兩列的值,則選擇較大的值

例如:

column1 column2 column3 column4 
hello hello  3  5 
hi  hi   7  1 

我需要返回:

column1 column2 Hybrid 
hello hello  5 
hi  hi  7 

我一直在嘗試使用的if/else,但我似乎無法得到正確的語法

+1

'IF/ELSE'在這裏不起作用。 – Kermit

+0

列結果上的混合值應該是5和7是否正確? – Yaroslav

回答

34

在T-SQL中IF命令是用於程序化的控制。例如:

  • IF x THEN doSQLStatement1 ELSE doSQLStatement2


在一個SQL語句,你需要CASE

CASE WHEN a > b THEN a ELSE b END 
+1

我預計10個upvotes這個答案。 – Kermit

+1

@njk - 哈! :) 我對此表示懷疑...雖然我不介意;) – MatBailie

+0

@MatBailie儘管我在尋找一些比這更復雜的東西,但我認爲你應該得到一個+1這麼謙虛。哦,順便說一句,你確實設法得到十張贊成票;) –

0
select column1, coloumn2, case when column3 < column4 then column4 else coloum3 end from table. 
+0

看起來你在這個片段中有一些拼寫/語法問題。 –

6

試試這個代碼:

SELECT column1, column2, 
     (CASE WHEN column3 > column4 THEN column3 ELSE column4 END) 
    FROM Table1 

結果:

COLUMN1 COLUMN2 Hybrid 
hello  hello  5 
    hi   hi  7 

Here you have complete sample在SQL提琴。

+0

SQL小提琴示例不加載。 – mobill

+0

Ufff !!似乎這個樣本太舊了,或者丟失了,刪除了或者其他任何東西 – Yaroslav

0

我將通過創建一個視圖啓動。

CREATE VIEW t_c 
SELECT id, c1 AS c FROM t 
UNION 
SELECT id, c2 AS c FROM t; 

然後,我會從該視圖中選擇。

SELECT id, MAX(c) FROM t_c GROUP BY id; 
2

您可以使用CASE,但如果其中一個值是「空」,則「空」被認爲是最大的價值。

爲了解決這個問題,你可以使用GREATEST

SELECT GREATEST(column3, column4) 
FROM Table1 
+0

這並不能回答這個問題。您可以[搜索類似的問題](https://stackoverflow.com/search),或參考頁面右側的相關和鏈接問題來查找答案。如果你有一個相關但不同的問題,請[提出一個新問題](https://stackoverflow.com/questions/ask),幷包含一個鏈接以幫助提供上下文。請參閱:[提問,獲得答案,不要分心](https://stackoverflow.com/tour) –

0

只是讓我們不要返回null:

SELECT IIF(a > b, a, COALESCE(a, b)) -- coalesce or isnull 
FROM wherever 

這裏有一個查詢來測試它:

with whatever as (
    select null as a, 1 as b 
    UNION 
    select 1 as a, null as b 
    union 
    select 1 as a, 0 as b 
    union 
    select 0 as a, 1 as b 
    union 
    select null as a, null as b 
) 
select(iif(a > b, a, isnull(b, a))) 
from whatever 

應返回

null 
1 
1 
1 
1 
+0

如果您使用的是Oracle,您可以使用GREATEST函數。 – user1427302

+0

「sql-server-2008」不存在'IIF',這是問題的標記。 – MatBailie