对列值进行排序以匹配另一个 table 列中值的顺序
Sort column values to match order of values in another table column
假设我 table 是这样的:
Column1 Column2
C 2
B 1
A 3
我需要交换第二列中的值才能得到这个:
Column1 Column2
C 3
B 2
A 1
目标只是让数字列的值按照另一列的字母顺序排序。实际的 table 有多个列,第 1 列是人名,而第 2 列二是用于呈现 UI.
中第 1 列值的排名
执行此操作的最佳方法是什么?
我在 SQL 服务器上从 C# 代码执行此操作,并且由于事务的原因必须使用 System.Data.SqlClient.SqlCommand。但如果这一切都可以从 SQL.
完成,也许并不重要
谢谢!
所以你需要根据Column1
用行号更新Column2
?
您可以使用 ROW_NUMBER
and a CTE:
WITH CTE AS
(
SELECT Column1, Column2, RN = ROW_NUMBER() OVER (ORDER BY Column1)
FROM MyTable
)
UPDATE CTE SET Column2 = RN;
这会更新 table MyTable
并起作用,因为 CTE 选择单个 table。如果它包含多个 table,则必须 JOIN
UPDATE
和 CTE
。
假设我 table 是这样的:
Column1 Column2
C 2
B 1
A 3
我需要交换第二列中的值才能得到这个:
Column1 Column2
C 3
B 2
A 1
目标只是让数字列的值按照另一列的字母顺序排序。实际的 table 有多个列,第 1 列是人名,而第 2 列二是用于呈现 UI.
中第 1 列值的排名执行此操作的最佳方法是什么? 我在 SQL 服务器上从 C# 代码执行此操作,并且由于事务的原因必须使用 System.Data.SqlClient.SqlCommand。但如果这一切都可以从 SQL.
完成,也许并不重要谢谢!
所以你需要根据Column1
用行号更新Column2
?
您可以使用 ROW_NUMBER
and a CTE:
WITH CTE AS
(
SELECT Column1, Column2, RN = ROW_NUMBER() OVER (ORDER BY Column1)
FROM MyTable
)
UPDATE CTE SET Column2 = RN;
这会更新 table MyTable
并起作用,因为 CTE 选择单个 table。如果它包含多个 table,则必须 JOIN
UPDATE
和 CTE
。