Сортировать данные и ранжирование используя соотношение - PullRequest
1 голос
/ 07 марта 2012

У меня есть запрос, в котором я получаю несколько столбцов из базы данных, это просто оператор select, а затем я добавляю столбцы в этот тип данных:

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

Затем у меня есть еще один столбец под названием Ранг, который снова добавляется вручную следующим образом:

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.##");
 }

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Используя информацию и предоставленные нам ограничения , я предложу следующий код:

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++;
}

Пример извлечен из сообщения форума .

1 голос
/ 07 марта 2012

Если вы хотите сделать это со стороны 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

1 голос
/ 07 марта 2012

Прямой от БД:

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