2016-12-08 23 views
-2

我有一个表test需要更新“排序依据”列

+----+--+------+--+--+----------+--+--------------+ 
| ID | | Name | | | orderby | | processgroup | 
+----+--+------+--+--+----------+--+--------------+ 
| 1 | | ABC | | |  10 | |   1 | 
| 10 | | DEF | | |  12 | |   1 | 
| 15 | | LMN | | |  1 | |   1 | 
| 44 | | JKL | | |  4 | |   1 | 
| 42 | | XYZ | | |  3 | |   2 | 
+----+--+------+--+--+----------+--+--------------+ 

我想更新序列中的orderby列,我期待像

+----+--+------+--+--+----------+--+--------------+ 
| ID | | Name | | | orderby | | processgroup | 
+----+--+------+--+--+----------+--+--------------+ 
| 1 | | ABC | | |  1 | |   1 | 
| 10 | | DEF | | |  2 | |   1 | 
| 15 | | LMN | | |  3 | |   1 | 
| 44 | | JKL | | |  4 | |   1 | 
| 42 | | XYZ | | |  5 | |   1 | 
+----+--+------+--+--+----------+--+--------------+ 

逻辑输出这背后是当我们有procesgroup作为1,orderby列应更新为1,2,3,4,当procesgroup为2时,则更新orderby为5.

+0

不能明白你的意思。你试过什么了? – ydoow

+0

@ydoow它确定我得到了答案 –

回答

-1

这可能会帮助你

;WITH CTE AS (
SELECT ROW_NUMBER() OVER (ORDER BY processgroup, ID) AS SNO, ID FROM TABLE1 
) 
UPDATE TABLE1 SET TABLE1.orderby= CTE.SNO FROM CTE WHERE TABLE1.ID = CTE.ID 
+0

为什么投票呢? ?解释 –

+0

Thanx Shakeer这正是我在我心中 –

+0

谢谢。所以我才知道我理解正确。 @红魔鬼 –