使用比率对数据表进行排序和排名
本文关键字:排序 比率 数据表 | 更新日期: 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]