对列值进行排序以匹配另一个表列中的值的顺序

时间:2015-10-09 09:03:50

标签: sql sql-server ado.net

我们说我有这样的表:

Column1            Column2
C                     2
B                     1
A                     3

我需要在第二列中交换值才能得到这个:

Column1            Column2
C                     3
B                     2
A                     1

目标仅限于数字列的值按其他字母顺序排列。实际表格有多列,第1列是人物的名称,第2列第2列是在UI中呈现第1列值的等级。

最佳方法是什么? 我是从SQL服务器上的C#代码执行此操作,并且由于事务而必须使用System.Data.SqlClient.SqlCommand。但是,如果这一切都可以通过SQL完成,那么它可能并不重要。

谢谢!

1 个答案:

答案 0 :(得分:3)

因此,您需要根据Column2使用行号更新Column1吗?

您可以使用ROW_NUMBERCTE

WITH CTE AS 
(
    SELECT Column1, Column2, RN = ROW_NUMBER() OVER (ORDER BY Column1)
    FROM MyTable
)
UPDATE CTE SET Column2 = RN;

这会更新表MyTable并且因为CTE选择单个表而起作用。如果它包含多个表格,您必须JOIN UPDATECTE

Demo