在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。

非常感谢你的帮助

在SQL的特定条件下重新排列列中的数据

你可以这样做:

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;