我有一张表格,其中提供以下数据:
ProductID ProductName Pref
--------- ----------- ----
001 ABC 1
005 CDE 3
009 EFG 2
008 HIJ 4
003 IJK 5
我想将[ProductID]的[Pref]更新为“005”从3到5.使用UPDATE SQL命令很容易。但是[Pref]列是唯一的,我不能用这样的SQL命令来更新。
我做了什么:排序[Pref]
ProductID ProductName Pref
--------- ----------- ----
001 ABC 1
009 EFG 2
005 CDE 3 <---
008 HIJ 4
003 IJK 5
我想看到的数据如下:
ProductID ProductName Pref
--------- - ---------- ----
001 ABC 1 -->1
009 EFG 2 -->2
008 HIJ 4 -->3
003 IJK 5 -->4
005 CDE 3 -->5<--
执行此类更改的SQL命令应该是什么。
我正在使用C#.NET(IDE:Visual Studio 2005)和MS SQL SERVER 2005.
非常感谢你的帮助。
答案 0 :(得分:3)
你可以这样做:
UPDATE Table
SET Pref = -1
WHERE Pref = 3
UPDATE Table
SET Pref = Pref - 1
WHERE Pref > 3
UPDATE Table
SET Pref = 5
WHERE Pref = -1
通过一些参数化和搜索最高当前数字,这可能变得非常通用。
编辑(见评论):
UPDATE Table
SET Pref = CASE WHEN Pref = 3 THEN 5 ELSE Pref - 1 END
WHERE Pref >= 3
答案 1 :(得分:0)
根据您的需要更改XXX
select peoductId , prodductname ,row_number() over (oredr by XXX) as pref from Table
答案 2 :(得分:0)
UPDATE T
SET Pref =
CASE
WHEN Pref > 3 THEN Pref-1
WHEN Pref = 3 THEN 5
END
WHERE
Pref =>= 3;