使用比率对数据表进行排序和排名

本文关键字:排序 比率 数据表 | 更新日期: 2023-09-27 18:26:59

我有一个查询,从数据库中获取一些列,这是一个简单的select语句,然后我将列添加到此数据表中,如下所示:

dt.Columns.Add(new DataColumn("ratio", typeof(double)));

然后我有另一个名为Rank的列,它再次手动添加如下:

dt.Columns.Add(new DataColumn("Rank", typeof(int)));

现在我如何首先按比率排序,然后使用比率添加秩,例如比率越高,秩就越高,例如,如果比率是3、5和9,一旦按比率排序它应该是:

rank ratio
1    9
2    5
3    3

编辑:

该比率是通过将我的查询中的两列分开来计算的

 foreach (DataRow row in dt.Rows)
 {
row["Ratio"] = (Convert.ToDecimal(row["LastMonth"]) / NoOfBranches).ToString("0.##");
 }

感谢

使用比率对数据表进行排序和排名

使用您给我们的信息和限制,我将建议下一个代码:

dt.Columns.Add(new DataColumn("Ratio", typeof(double)));
dt.Columns.Add(new DataColumn("Rank", typeof(int)));
foreach (DataRow row in dt.Rows)
{
    row["Ratio"] =
        (Convert.ToDecimal(row["LastMonth"]) / NoOfBranches).ToString("0.##");
}
//sorting the DataTable using the new DataColumn
dt.DefaultView.Sort = "Ratio DESC";
//after the sort, set the rank for each one
int rank = 1;
foreach (DataRow row in dt.Rows)
{
    row["Rank"] = rank++;
}

示例摘自论坛帖子。

如果你想从世界的C#端做到这一点:

DataTable dt = new DataTable();
dt.DefaultView.Sort = "ratio DESC";
dt.Columns.Add(new DataColumn("Rank", typeof(int)));
int count = 1;
foreach (DataRowView dr in dt.DefaultView)
{
    dr["Rank"] = count++;
}

无论何时使用DataTable,都需要参考dt。DefaultView,因为它是表的排序版本。有关更多信息,请参阅MSDN:

http://msdn.microsoft.com/en-us/library/system.data.datatable.defaultview.aspx

直接从数据库:

SELECT RANK() OVER (ORDER BY ratio DESC) AS rank,ratio FROM [YourTableName]