2011-06-30 39 views
1

可以說我有一個有20行的列(它更多,但是這個概念將適用於20)。目前,該列的唯一編號爲1-20。我需要弄清楚一個查詢,儘管這會將數字方案從順序改爲順序,只是偶數或奇數。一個SQL查詢重新排列一個列的數量是奇數還是全部甚至是

因此,例如我只需要在一個表中創建一個列,它在偶數或奇數編號。因此,更新查詢運行後,它會將我的列數據從1-20更改爲2-40(僅限偶數)或1-39(僅限奇數)。

對不起,如果這沒有意義,或者如果你不能想出爲什麼我需要這個理由,但以一種奇怪的方式,我確實需要它。

編輯:

由於這樣的事實,這是沒有意義的,我會盡力和澄清多一點。

我有一個正在有序1-10

1,2,3,4,5,6,7,8,9,10列。

我想在列執行更新查詢,以便它看起來像這樣:

1,3,5,7,9,11,13,15,17,19

2,4,6,8,10,12,14,16,18,20

是否有更新查詢,我可以運行這樣做?

+3

對我沒有意義 - 樣本數據和預期的輸出會真的有幫助 –

+0

如果沒有意義,我很抱歉,我更新了問題以澄清一點。謝謝 –

回答

1

對於偶數:

UPDATE YourTable 
    SET YourColumn = YourColumn * 2; 

對於奇數號碼:

UPDATE YourTable 
    SET YourColumn = YourColumn * 2 - 1; 

只能遇到麻煩,如果你的DBMS開始太快檢查專欄的唯一性,這最終是DBMS的缺陷(或限制)。即:'even'更新正在運行時,可能有一個尚未更新的行包含值2以及已更新的包含值2(最初爲1)的行。如果數據庫管理系統在每一行強制執行唯一性,則會失敗;但DBMS不應該這樣做。

+0

如果'YourColumn'有獨特的約束,UPDATE將失敗,對吧? –

+0

在檢查唯一性的情況下,可以分兩步進行。像「SET YourColumn = YourColumn * -2」,後面跟着「SET YourColumn = YourColumn * -1」。 –

+0

是對的,一個體面的RDBMS不應該失敗。儘管MySQL會失敗(但是可以使用UPDATE中ORDER BY的附加「特性」來避免失敗)。 –

1

您可以按照您喜歡的任何順序顯示您的行。

行排序甚至IDS第一:

SELECT * 
FROM yourTable 
ORDER BY id MOD 2 
     , id 
+0

謝謝!排序是我錯過的。更新聲明會有什麼不同?這真的是我想要做的是通過更新聲明訂購一個列 –

+0

這沒有任何意義。請用數據樣本編輯您的問題。你有什麼和你想要的結果(用SELECT顯示或用UPDATE更改)。 –

+1

@Stephen J .:您不能使用更新聲明對列進行訂單。您在SELECT語句中使用'ORDER BY'子句在列上施加順序。在您提供的樣本數據中,即使值已更改,現有訂單和所需訂單也是相同的。 –

相關問題