2012-03-07 89 views
1

我有一個查詢在那裏我得到了一些列的數據庫是簡單的SELECT語句,然後我將列添加到這個數據表爲:排序的DataTable和排名使用比

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

由於從數據庫

+1

如果您告訴我們您如何確定比例,我可以讓您直接從SQL Server獲得該查詢(假設這是您的RDBMS),而無需將它們添加到C#代碼中 – 2012-03-07 15:52:07

+0

您可以獲得每行使用您的比率數據只有或有一個應用程序規則才能得到它? – 2012-03-07 15:53:27

+0

@Adrian我用比我的SQL查詢兩個字段計算 - 我會更新這個問題 – Zaki 2012-03-07 15:53:36

回答

1

如果你想從世界的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

+0

這個工作,但是當我回到它不排序的數據表... – Zaki 2012-03-07 16:06:15

+0

每當你使用任何東西的數據表,你需要將它稱爲:dt.DefaultView或將在訂貨,它被放置在數據表中首先。 – ImGreg 2012-03-07 16:07:55

+1

酷就解決它,你需要編輯你的代碼的foreach(DataRowView的醫生.....謝謝:) – Zaki 2012-03-07 16:11:54

1

直接:

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

如果您想從數據庫端執行操作,這是一個很好的答案。 +1 – ImGreg 2012-03-07 16:15:56

2

使用信息 您給予我們的restrinctions,我會建議下一代碼:從forum post提取

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

例。

+0

你需要從ASC切換到排序DESC。他想要高到低的比例。 – ImGreg 2012-03-07 16:14:46

+1

@ImGreg答案編輯,並添加代碼以設置秩柱和 – 2012-03-07 16:18:14

+0

1感謝答案值 – Zaki 2012-03-07 16:22:04