2012-07-12 32 views
1

比方說,我有一個表T,它有一個屬性,A,一個整數。SQL有條件地選擇不同的aggergates

如何讓SQL查詢返回MAX(T) + 1如果T包含5和MAX(T) + 2如果不是?

+0

背後有什麼這個奇怪的要求,真正的任務是什麼? PS:你使用什麼實際的DBMS? – zerkms 2012-07-12 05:25:58

+0

我正在使用SQLite。我試圖返回一個正整數序列中不存在的最小正整數。例如如果序列爲2,6,7,則返回3.如果序列爲1,2,3,4,則返回5.如果序列爲3,則返回2 4. 4. – 2012-07-12 05:28:56

+0

「如果序列爲2,6,7,則返回3。 「 ---爲什麼不是1? 「如果序列是3,4返回2」---爲什麼不是1? – zerkms 2012-07-12 05:31:19

回答

2
SELECT MAX(a) + CASE WHEN (5 IN (SELECT a FROM t)) THEN 1 ELSE 2 END AS max_plus_something FROM t 
0

我沒有機會測試很多情況,但我認爲這可以做你想做的。

declare @MinPosNI int; 
set @MinPosNI = 1; 
select @MinPosNI = case when (A - @MinPosNI) > 0 then @MinPosNI else A + 1 end from T  where A > 0 order by A 
select @MinPosNI 
1
SELECT MAX(A) + MIN(CASE A WHEN 5 THEN 1 ELSE 2 END) AS NewA FROM T