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

时间:2011-10-25 07:02:36

标签: c# .net sql-server-2005

我有一张表格,其中提供以下数据:

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.

非常感谢你的帮助。

3 个答案:

答案 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;