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

Posted

技术标签:

【中文标题】对列值进行排序以匹配另一个表列中值的顺序【英文标题】: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。如果有两个表涉及,那么相应地给出例子。 SQL Update with row_number()的可能重复 库马尔,据我所知,C是英文字母表中的第三个字母 【参考方案1】:

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

您可以使用ROW_NUMBER 和CTE:

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 列的字母顺序。但我认为,即使这样,我也能做点什么。

以上是关于对列值进行排序以匹配另一个表列中值的顺序的主要内容,如果未能解决你的问题,请参考以下文章

对列值使用变量提示和过滤语句

创建视图并对列值进行求和

Laravel 选择列,然后按日期对列值进行分组

Pandas:如何根据其他列值的条件对列进行求和?

基于一周范围的窗口对列值求和(黑斑羚)

根据可变日期范围(impala)在窗口上对列值求和