1. 程式人生 > >C#Datatable分組操作SUM求和Group by

C#Datatable分組操作SUM求和Group by

今天在做專案的時候遇到了一個問題,就是要對Datatable進行分組操作,就像SQLSERVER 裡面的SUM group by 語句一樣,估計以後還會用到,所以現在這裡總結一下,方便以後查詢的時候使用,同時也為了提高訪問量 首先先附上我的DEMO程式碼:是一個在控制檯輸出的demo   DataTable dt = new DataTable();
            dt.Columns.Add("C1"); dt.Columns.Add("C3"); dt.Columns.Add("C2");
            dt.Columns["C2"].DataType = typeof(int);//這一行程式碼必須要加,否則會出現C#comPute無效的聚合函式sum,string 等錯誤提示
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt.NewRow();
                dr["C1"] = "B";
                dr["C2"] = i;
                dr["C3"] = "g";
                dt.Rows.Add(dr);
            }
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt.NewRow();
                dr["C1"] = "A";
                dr["C2"] = 5;
                dr["C3"] = "h";
                dt.Rows.Add(dr);
            }
--------------------從上面的程式碼一直到這都是為了建立一個10行三列的表格 接下來就是具體實現分組求和的程式碼
            DataTable dtResult = dt.Clone();//將dt克隆到dtResult,但是dtResult裡面並沒有資料,只有結構,這是COPY方法的區別
            DataTable dtName = dt.DefaultView.ToTable(true, "C1");//選擇某一列中不同項的名稱,這裡選的是C1列只有A和B兩個不同的項
//接下通過迴圈分組求和
            for (int i = 0; i < dtName.Rows.Count; i++)
            {
                DataRow[] rows = dt.Select("C1='" + dtName.Rows[i][0]+"'");//注意這裡多一對單引號,在等號後面有一個單引號這點一定不能忘記,否則執行的時候會出錯,提示找不到列
                DataTable temp = dtResult.Clone();
                foreach(DataRow row in rows)
                {
                    temp.Rows.Add(row.ItemArray);
                }
                DataRow dr = dtResult.NewRow();
                dr[0] = dtName.Rows[i][0].ToString();
                dr[1] = temp.Compute("sum(C2)", "");//compute 是一個函式用於計算,只有兩個引數
                dtResult.Rows.Add(dr);
            }
            for(int i=0;i<dt.Rows.Count;i++)
            {
                Console.WriteLine(Convert.ToString(dt.Rows[i][0]) + "   " + Convert.ToDouble(dt.Rows[i][2]));
            }
            Console.WriteLine("-----------------------------------------------------------");
            for (int i = 0; i < dtResult.Rows.Count; i++)
            {
                Console.WriteLine(Convert.ToString(dtResult.Rows[i][0]) + "   " + Convert.ToDouble(dtResult.Rows[i][1]));
            }
            Console.ReadKey();
最後附上我電腦上的執行結果

相關推薦

C#Datatable分組操作SUM求和Group by

今天在做專案的時候遇到了一個問題,就是要對Datatable進行分組操作,就像SQLSERVER 裡面的SUM group by 語句一樣,估計以後還會用到,所以現在這裡總結一下,方便以後查詢的時候使

C#中對DataTable進行全連接後group by,orderby

orderby utime mp3 var c# put enume enum solver var result = from temp2 in ( f

SUMGROUP BY語句的優化

ble 排序。 Inventor 好的 海量 超過 ash 無需 原因 一.SUM與GROUP BY語句的優化: 1.原語句為:SELECT IID.INVENTORY_ITEM_ID, SUM(IID.AVAILABLE_TO_PROMISE_DIFF), SUM(IID

JavaScript SUM and GROUP BY of JSON data

This is my first attempt at doing JavaScript with some JSON data objects and need some advice on the pr

How to SUM and GROUP BY of JSON data?

How to SUM and GROUP BY of JSON data? Source: StackOverflow.com Question Some server-side code actually generates a JSON formatted stri

Mapreduce例項-分組排重(group by distinct)

需要實現以下幾個類,程式碼太多,列了下主要程式碼,可根據排重資料的特徵判讀是否需要新增combiner來提速。public class GroupComparator implements RawComparator<MyBinaryKey> { @Over

DataTable中進行Distinct、Group by、Join、Create

using System; using System.Collections; using System.Data; namespace Common { /**/ /// <summary> /// DataSet助手 參考資料:h

c# datatable 分組

groupby bsp num 行政區 datatable span 行政 color datarow DataTable dt = new DataTable(); IEnumerable<IGrouping<string, DataRow>&

Linq 分組group by求和sum)並且按照分隔符(join)分割列資料

var query = from c in t.AsEnumerable() group c by new { pingming = c.Field<string>("品名"),

elasticsearch聚合操作——本質就是針對搜索後的結果使用桶bucket(允許嵌套)進行group by,統計下分組結果,包括min/max/avg

per 找到 只需要 語句 所有 smi 即使 log 以及 分析 Elasticsearch有一個功能叫做聚合(aggregations),它允許你在數據上生成復雜的分析統計。它很像SQL中的GROUP BY但是功能更強大。 舉個例子,讓我們找到所有職員中最大的共同點(興

mysql 對錶資料進行求和分組並在結果中篩選符合條件的資料 having group by count

查詢table表查詢每一個班級中年齡大於20,性別為男的人數 select COUNT(*)as '大於20歲人數',classid  from Table1 where sex='男' group by classid,age having age>20 --需

巧用case進行分類求和(case & group by & sum

table1 code(商品程式碼) price(價格) num(數量) type(買賣) 1 10 5 B 1 10 10 S 2 5 20 B 2 5 40 S 問題: 求商品(code)在某個價格(price)時買進(type=B)和賣出(type=S)的數量(nu

mysql 分組group by後 根據具體條件進行sum

mysql的手冊中對SUM函式的介紹非常簡單和含糊, 今天在搜資料的時候發現SUM函式的引數還可以加入條件判斷.  比如有如下的一個表: 日期                    支出專案名稱                          支出類別           支出金額       

mysql使用GROUP BY分組實現取前N條記錄的方法

cls class ges rom 當前 分組 實現 一個 images MySQL中GROUP BY分組取前N條記錄實現 mysql分組,取記錄 GROUP BY之後如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。 這是測試表(也

c#datatable操作

.so dex 架構 排序 wrapper [0 grid zhang 通過 c#操作datatable 1.創建表 DataSet ds=new DataSet(); DataTable dt=new DataTable("User"); ds.Add(dt); dt.C

[Mysql 查詢語句]——分組查詢group by

dash sel concat avg 年齡 http 查詢語句 表示 單獨 #group by #group by + group_concat() #group by + 集合函數 #group by + having #group by (1) group by

group by多字段分組

意思 order 商品 james pre ring 2.0 分組 課程 在平時的開發任務中我們經常會用到MYSQL的GROUP BY分組, 用來獲取數據表中以分組字段為依據的統計數據。比如有一個學生選課表,表結構如下: Table: Subject_Selection

淺析MySQL使用 GROUP BY 分組聚合與細分聚合

官方 dev 錯誤 row 一個 求平均值 時也 total 正是 1. 聚合函數(Aggregate Function)   MySQL(5.7 ) 官方文檔中給出的聚合函數列表(圖片)如下: 詳情點擊https://dev.mysql.com/doc/refman/5

SQL基本操作——GROUP BY

order 實例 擁有 分組 tom price 金額 根據 操作 GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。 SQL GROUP BY 實例:我們擁有下面這個 "Orders" 表 O_Id OrderDate OrderPrice

c# DataTable 操作總結 幹貨

dataview wro 刪除 列名 lba logs int sin int32 第一個是添加datatable以及操作 第二是在已有的table上操作 基本上所有的都應該有涵蓋 如果沒有留言我好更新。 一、 添加引用 using System.Data;