2017-10-17 171 views
0

我有一個名爲設備的表,現在我需要互換devid 5和devid 6的devid行的順序。如何交換和更新SQL中行的順序?

CurrentTable

PID DEVID INID EVTYPEID EVID ALID PARMID TEXTID InputName Input2Name 
1 1  0  30  0 100102  0 14  998-TCR1  998-EMG1 
1 2  0  30  0 100103  0 15  998-FR  998-TCR2 
9 3  0  30  0 100113  0 25  998-TCR2  998-EMG2 
0 4  2  30  0 100114  0 26  998-FR  NULL 
8 5  18  4  53 100114  0 0  998-Sg op 998-Sg cl 
4 6  17  4  53 1000114  0 0  SG_PB  RA_PB 

預期結果

PID DEVID INID EVTYPEID EVID ALID PARMID TEXTID InputName Input2Name 
1 1  0  30  0 100102  0 14  998-TCR1  998-EMG1 
1 2  0  30  0 100103  0 15  998-FR  998-TCR2 
9 3  0  30  0 100113  0 25  998-TCR2  998-EMG2 
0 4  2  30  0 100114  0 26  998-FR  NULL 
4 6  17  4  53 1000114  0 0  SG_PB  RA_PB 
8 5  18  4  53 100114  0 0  998-Sg op 998-Sg cl 

我有我的表和PID和RID是主鍵

+0

爲什麼不使用ORDER BY?或者在表示層中排序?使用表格ID作爲訂購系統並不是一個好習慣。或者DEVID是嚴格用於排序的列嗎? –

+0

它只是5和6交換,或者這是一個持續的事情多行? – Twelfth

+0

還有另一張桌子在這裏devid列devid。所以我想按照相同的順序做這個 – coffemug

回答

0

你的c 150列urrent select語句加上:

Order by case when DEVID = 6 then 5 
when DEVID = 6 then 6 
else Devid 
end 

不是一個漂亮的解決方案,但回答了問題。

+0

我也想更新該列訂單 – coffemug

+0

?你基於rowID更新而不是一些命令。你是什​​麼意思,你需要更新一個專欄?我現在感覺很愚蠢,我告訴Gordon Linoff這是一個沒有更新的訂購問題。 – Twelfth

+0

我更新了標題。我真正想要的是通過交換行來更新表格,也許我會讓它變得複雜或過於愚蠢。忍受我 – coffemug

0

您需要使用臨時編號來切換它們。

UPDATE Device SET DEVID=-6 WHERE DEVID=6; 
UPDATE Device SET DEVID=6 WHERE DEVID=5; 
UPDATE Device SET DEVID=5 WHERE DEVID=-6; 

如果另一個表與DEVID列有外鍵關係,那麼它會變得有點棘手。選項:

  • 你可以打破外鍵關係,做開關,然後把 放回去。
  • 您可以創建一個DEVID = 7的臨時記錄(或 其他未採取的操作),並在上面的查詢 (而不是-6)中使用7作爲佔位符。在這種情況下,請不要忘記在完成後刪除 虛擬記錄。