2015-04-14 64 views
1

所以我需要做的是選擇列的最大值(並且每次增加1),如果這個值爲空(這將是第一種情況發生)我必須返回常量0(這將是下一次發生的最大值)。SQL - 選擇一個增量值或返回一個常數

我的目標是做這樣的事情:

SELECT (Max(id) + 1) FROM my_table WHERE id IS NOT NULL 
UNION 
SELECT 0 FROM my_table WHERE id IS NULL 

但是不起作用。我能做什麼?

回答

1

編寫查詢的方式,它會返回兩行。一個用於第一個查詢,另一個用於聯合。

如果你只想要一行,你可以使用MAX()函數。如果該表爲空,則MAX()函數返回null。然後,您有一個選項是在您的select語句中使用COALESCE(),該語句返回第一個非空值。換句話說,這個查詢:

SELECT COALESCE(MAX(id) + 1, 0) AS maxID 
FROM myTable; 

可以解釋爲:給我從表中的最大ID。如果表爲空,則返回0.

以下是帶有空表格和非空表格的fiddle示例。

+1

好的解釋,做到了!並感謝小提琴的鏈接(毫無疑問,這將有助於未來的使用) –

+0

@ maher.belkh沒有問題。是的,SQL Fiddle對共享數據庫幫助非常有幫助,尤其是在本站點上。 – AdamMc331

0
SELECT (MAX(CASE WHEN id IS NULL THEN 0 ELSE id END) + 1) FROM my_table 
1

試試這個

SELECT COALESCE(Max(id + 1), 0) FROM my_table WHERE id IS NOT NULL 
+0

這是一個很好的解決方案。它可以通過刪除'WHERE ID IS NOT NULL'來改進,因爲你的coalesce函數可以處理它,所以它變得多餘。 – AdamMc331

+0

這是真的,我有盲目拷貝\粘貼它像作家的業務規則 –

相關問題