在SQL的特定条件下重新排列列中的数据
本文关键字:排列 数据 新排列 SQL 条件下 | 更新日期: 2023-09-27 18:12:31
我有一个表,其中有以下数据:
ProductID ProductName Pref
--------- ----------- ----
001 ABC 1
005 CDE 3
009 EFG 2
008 HIJ 4
003 IJK 5
我想用"005"从3更新[ProductID]的[Pref]到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。
非常感谢你的帮助
你可以这样做:
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
根据需要更改XXX
select peoductId , prodductname ,row_number() over (oredr by XXX) as pref from Table
UPDATE T
SET Pref =
CASE
WHEN Pref > 3 THEN Pref-1
WHEN Pref = 3 THEN 5
END
WHERE
Pref =>= 3;