C# datatable过滤某一列的重复数据(相当于distinct)
来源:互联网 发布:mysql 修改字段长度 编辑:程序博客网 时间:2024/05/21 17:19
1.问题描述
在程序代码中有一个查询出来的datatable,暂且叫他A,数据结构如下:
日期
检测方法
检测数量
01
A
10
01
B
11
01
C
8
02
A
13
02
B
9
03
A
7
03
B
12
03
C
11
我要做的是处理这个A表用于打印报表,将他的数据结果转换成下面这种形式:
日期
A检测方法
B检测方法
C方法
01
10
11
8
02
13
9
03
7
12
11
2.思路:
刚开始做的时候思路很乱(其实压根就是上来就foreach循环然后调试。。),写了几个循环发现貌似搞不了,如果可以搞的话,非常感谢你能留言我们一起交流。
然后开始查阅相关资料,发现C#操作datatable可以使用datatable.Select("column1='条件'")来筛选需要筛选的数据,条件可以有多个,返回的结果为DataRow[]集合。
再来看表A的结构,日期有重复,使用datateble.DefaultView.ToDataTable(true,new string[] { "column1" })过滤需要过滤的数据,相当于sql语句中的distinct用法,可以有多列。
关键语法:
DataRow[] drArr = DataTable1.Select("clumn1='条件'") //按条件查询结果DataTable dt = DataTable1.DefaultView.ToTable(true,new string[] { "column1" }) //过滤数据
3.部分代码:
string a = "select car_zhdate,car_testtype,count(0) 每天各个检测方法检测数量 from Tj_Car_TestType group by car_zhdate,car_testtype order by car_zhdate,car_testtype";//每天各个检测方法检测多少车 string b = "select a.car_zhdate,各天初检合格数量,各天初检总数量,isnull(各天复检合格数量,0) 各天复检合格数量,isnull(各天复检总数量,0) 各天复检总数量 from " + "(select car_zhdate,count(0) 各天初检合格数量 from Tj_Car_TestType where car_evl='T' and car_ccdate=car_zhdate and car_rettest='1' group by car_zhdate) a " + "left join " + "(select car_zhdate,count(0) 各天初检总数量 from Tj_Car_TestType where car_ccdate=car_zhdate and car_rettest='1' group by car_zhdate ) b " + "on a.car_zhdate = b.car_zhdate " + "left join " + "(select car_zhdate,count(0) 各天复检合格数量 from Tj_Car_TestType where car_evl='T' and car_ccdate=car_zhdate and car_rettest='2' group by car_zhdate) c " + "on a.car_zhdate=c.car_zhdate " + "left join " + "(select car_zhdate,count(0) 各天复检总数量 from Tj_Car_TestType where car_ccdate=car_zhdate and car_rettest='2' group by car_zhdate ) d " + "on a. car_zhdate=d.car_zhdate"; DataTable aa = SqlHelper.ExecuteDataset(CommandType.Text, a).Tables[0]; DataTable bb = SqlHelper.ExecuteDataset(CommandType.Text, b).Tables[0]; DataTable tempdb = new DataTable(); tempdb.Columns.Add("ri", typeof(string)); tempdb.Columns.Add("asm", typeof(string)); tempdb.Columns.Add("sds", typeof(string)); tempdb.Columns.Add("btg", typeof(string)); tempdb.Columns.Add("sub", typeof(string)); tempdb.Columns.Add("cjhgl", typeof(string)); tempdb.Columns.Add("fjhgl", typeof(string)); string sub = ""; string cjhgl = ""; string fjhgl = ""; foreach (DataRow dr in bb.Rows) { sub = Convert.ToString(Convert.ToInt32(dr["各天初检总数量"].ToString()) + Convert.ToInt32(dr["各天复检总数量"].ToString())); cjhgl = (Convert.ToDecimal(dr["各天初检合格数量"].ToString()) / Convert.ToDecimal(dr["各天初检总数量"].ToString())).ToString("P"); if (dr["各天复检总数量"].ToString() == "0") { fjhgl = "无复检车辆"; } else { fjhgl = (Convert.ToDecimal(dr["各天复检合格数量"].ToString()) / Convert.ToDecimal(dr["各天复检总数量"].ToString())).ToString("P"); } tempdb.Rows.Add("", "", "", "", sub, cjhgl, fjhgl); } DataRow[] sdsarr; DataRow[] asmarr; DataRow[] btgarr; DataTable ritable = aa.DefaultView.ToTable(true, new string[] { "car_zhdate" }); int ricount = ritable.Rows.Count; for (int i = 0; i < ricount; i++) { sdsarr = aa.Select("car_zhdate='" + ritable.Rows[i]["car_zhdate"].ToString() + "' and car_testtype='0'"); asmarr = aa.Select("car_zhdate='" + ritable.Rows[i]["car_zhdate"].ToString() + "' and car_testtype='1'"); btgarr = aa.Select("car_zhdate='" + ritable.Rows[i]["car_zhdate"].ToString() + "' and car_testtype='4'"); tempdb.Rows[i]["ri"] = ritable.Rows[i]["car_zhdate"].ToString(); if (sdsarr.Length > 0) tempdb.Rows[i]["sds"] = sdsarr[0]["每天各个检测方法检测数量"].ToString(); else tempdb.Rows[i]["sds"] = "0"; if (asmarr.Length > 0) tempdb.Rows[i]["asm"] = asmarr[0]["每天各个检测方法检测数量"].ToString(); else tempdb.Rows[i]["asm"] = "0"; if (btgarr.Length > 0) tempdb.Rows[i]["btg"] = btgarr[0]["每天各个检测方法检测数量"].ToString(); else tempdb.Rows[i]["btg"] = "0"; }
阅读全文
1 0
- C# datatable过滤某一列的重复数据(相当于distinct)
- C# DataTable 过滤重复数据
- C# DataTable 过滤重复数据
- C# DataTable 过滤重复数据
- C# DataTable 过滤重复数据
- C# DataTable 过滤重复数据
- C# DataTable抽取Distinct数据(不重复数据)
- C# DataTable抽取Distinct数据(不重复数据)
- C# DataTable 中实现 DISTINCT 显示不重复列
- Castle ActiveRecord的distinct过滤重复数据
- distinct去掉某一列重复值
- c#实现datatable的某一行某一列的数据绑定在一个控件上(一点学习记录)
- C# 用Linq实现DataTable实现重复数据过滤
- Oracle中通过distinct为什么过滤不了重复的数据?
- DataTable某一列的最大值
- 连表查询,distinct过滤重复数据
- DataSet的简单合并和DataTable的重复数据过滤
- sql 重复列数据过滤
- leetcode 225. Implement Stack using Queues
- 泊松分酒--蓝桥杯java历年真题
- 正则表达式
- 排序算法之归并排序
- canvas
- C# datatable过滤某一列的重复数据(相当于distinct)
- Android5.0 framework 灯光系统 -- 电池灯源码分析
- 2017.8.11暑假集训第十二天
- 勇哥叫你spring
- 计蒜客 递推
- Oracle 伪列: ROWNUM 应用与总结
- Ajax
- Unity Lua 怎么设置按钮点击不生效以及变灰
- Spring Boot 与Redis 集成实现消息发布/订阅模式