1、用两层循环计算,前提条件是数据已经按分组的列排好序的。

DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)),                                         new DataColumn("sex", typeof(string)),                                         new DataColumn("score", typeof(int)) }); dt.Rows.Add(new object[] { "张三","男",1 }); dt.Rows.Add(new object[] { "张三","男",4 }); dt.Rows.Add(new object[] { "李四","男",100 }); dt.Rows.Add(new object[] { "李四","女",90 }); dt.Rows.Add(new object[] { "王五","女",77 }); DataTable dtResult = dt.Clone(); for (int i = 0; i < dt.Rows.Count; ) {     DataRow dr = dtResult.NewRow();     string name = dt.Rows[i]["name"].ToString();     string sex = dt.Rows[i]["sex"].ToString();     dr["name"] = name;     dr["sex"] = sex;     int score = 0;     //内层也是循环同一个表,当遇到不同的name时跳出内层循环     for (; i < dt.Rows.Count; )     {         if (name == dt.Rows[i]["name"].ToString()&&name == dt.Rows[i]["sex"].ToString())         {             score += Convert.ToInt32(dt.Rows[i]["score"]);             dr["score"] = score;             i++;         }         else         {             break;         }     }     dtResult.Rows.Add(dr);

}

dtResult中的数据即是最终结果。

2、 借助DataTable的Compute方法,DataTable中数据不用事先排好序。

] + "'");     //temp用来存储筛选出来的数据     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(score)", "");     dtResult.Rows.Add(dr);

}

3、使用linq to DataTable group by实现

var query = from t in dt.AsEnumerable()             group t by new { t1 = t.Field<string>("name"), t2 = t.Field<string>("sex") } into m             select new             {                 name = m.Key.t1,                 sex = m.Key.t2,                 score = m.Sum(n => n.Field<decimal>("score"))             }; if (query.ToList().Count > 0) {     query.ToList().ForEach(q =>     {         Console.WriteLine(q.name + "," + q.sex + "," + q.score);     }); }


收集整理,非原创

GROUP by 方法  C#的更多相关文章

  1. Oracle查询表里的重复数据方法:

    一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...

  2. ORA-15260: permission denied on ASM disk group

    向ASM磁盘组添加新的磁盘的时候,报了以下错误: $ sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 2 ...

  3. ExpandableListView(三)只展开一个group,没有child不展开group

    本文是自己在实践中,发现的问题. 有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group 在一个ExpandableListView ...

  4. signalr中Group 分组群发消息的简单使用

    前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...

  5. MYSQL GROUP BY Optimization

    GROUP BY Optimization 常规的匹配group by(分组)操作子句是扫整表并且创建包含连续的分组行的临时表, 利用临时表得到group数据,运用appregate function ...

  6. 查询订阅某topic的所有consumer group(Java API)

    在网上碰到的问题,想了下使用现有的API还是可以实现的. 首先,需要引入Kafka服务器端代码,比如加入Kafka 1.0.0依赖: Maven <dependency> <grou ...

  7. 1.3 正则表达式和python语言-1.3.4使用 match()方法匹配字符串

    1.3.4使用 match()方法匹配字符串(第一次写博客,格式,述语有不当之处还请见谅)2018-05-08 Python 代码是以Jupyter Notebook编写的,主要写的是python3的 ...

  8. Mysql按条件计数的几种方法

    最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况.尝试了几种方法,下面简要记录,供大家参考. 问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景. 从前有一个皇帝,他有 ...

  9. SQL操作语句之查询及删除重复记录的方法

    delete from 表 where id not in(select min(id) from 表 group by name ) //删除重复名字的记录 删除之前请用语句 select * fr ...

随机推荐

  1. ubuntu上解决访问github慢的方法

    1.进入终端命令行模式,输入sudo vi /etc/hosts 2.输入i进入编辑命令,英文输入法输入G,vim编辑器跳到hosts文件的最后一行 3.用浏览器访问 IPAddress.com 使用 ...

  2. java常用类-String类

    * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象. * B:字符串是 ...

  3. How to install Maven on Windows

    To install Apache Maven on Windows, you just need to download the Maven’s zip file, and Unzip it to ...

  4. C# 基于任务的异步模式的创建与使用的简单示例

    对于窗体程序,使用基于任务的异步模式需要用到Task类,下面示例下非常简单的用法. 1.创建一个拥有异步方法的类 该类拥有一个异步方法DoSomthingAsync,根据微软建议的命名规则该方法要带A ...

  5. extjs的使用笔记2

    系统的大部分资源(安装程序的除bin, lib, conf等之外的东西)都是放在 /usr/share/目录中的 在用户自己定义的, 一些关于系统资源的东西, 则放在目录 ~/.local/share ...

  6. shell编程中的 三种结构: 条件if/选择结构case/循环for/while/until等结构 和 函数的用法

    shell 函数的使用 (md中, 列表本身是有格式的, 他要产生缩进, 其次,列表项和列表项之间, 可以留有一个空行, 是合法的, 允许的) shell函数,就是 就相当于一个命令来看待和处理的, ...

  7. HDU 4366 Successor(dfs序 + 分块)题解

    题意:每个人都有一个上司,每个人都有能力值和忠诚值,0是老板,现在给出m个询问,每次询问给出一个x,要求你找到x的所有直系和非直系下属中能力比他高的最忠诚的人是谁 思路:因为树上查询很麻烦,所以我们直 ...

  8. 这几道Java集合框架面试题几乎必问

    Arraylist 与 LinkedList 异同 补充:数据结构基础之双向链表 ArrayList 与 Vector 区别 HashMap的底层实现 JDK1.8之前 JDK1.8之后 HashMa ...

  9. parent获取子元素以及自身元素

    innerHTML 设置或获取位于对象起始和结束标签内的 HTML outerHTML 设置或获取对象及其内容的 HTML 形式 innerText 设置或获取位于对象起始和结束标签内的文本 oute ...

  10. Python实现机器学习算法:EM算法

    ''' 数据集:伪造数据集(两个高斯分布混合) 数据集长度:1000 ------------------------------ 运行结果: ---------------------------- ...