【问题标题】:Sort column values to match order of values in another table column对列值进行排序以匹配另一个表列中值的顺序
【发布时间】:2015-10-09 09:03:49
【问题描述】:

假设我有这样的表:

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 完成,也许并不重要。

谢谢!

【问题讨论】:

  • select col1,col2 from tablename order by col1,col2
  • 是的,但我需要更新表格值
  • 给出正确的例子。在你当前的例子中没有逻辑。为什么 C=3 而实际上是 c=2。如果有两个表涉及,那么相应地给出例子。
  • 库马尔,据我所知,C是英文字母表中的第三个字母

标签: sql sql-server ado.net


【解决方案1】:

所以您需要根据Column1 使用行号更新Column2

您可以使用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

【讨论】:

  • 我的问题不在行号之上,我对其进行了编辑以添加更多详细信息。它关于排序数字列值以遵循另一个 nvarchar 列的字母顺序。但我认为,即使这样,我也能做点什么。
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2012-08-27
  • 2011-09-30
相关资源
最近更新 更多