日期:2014-05-17  浏览次数:20829 次

DateSet 记录分组排序并过滤的问题
表1,名为:Table1
字段1,字段2,字段3
aa,bb,6
aa,bb,6.5
aa,bb,5
cc,dd,7
cc,dd,6
ee,ff,9

字段1与字段2都相等的情况 取字段3最大的

结果:
aa,bb,6.5
cc,dd,7
ee,ff,9

有什么好的办法可以快速实现

------解决方案--------------------
C# code
var query= from t in ds.Talbes[0].AsEnumerable()
           group t by new {字段1=t.Field<string>("字段1"),字段2=t.Field<string>("字段2")} into g
           select new {g.Key.字段1,g.Key.字段2,字段3=g.Max(s=>s.Field<double>("字段3")};

------解决方案--------------------
本人亲自试过,可以达到你要的效果!

select 字段1 ,字段2,max(字段3) from Table1 group by 字段1,字段2
------解决方案--------------------
up
探讨
本人亲自试过,可以达到你要的效果!

select 字段1 ,字段2,max(字段3) from Table1 group by 字段1,字段2

------解决方案--------------------
上面的回答第三个字段没有表头,下面的这个第三个地段有表头

select 字段1 ,字段2,max(字段3) as ’字段3‘ from Table1 group by 字段1,字段2
------解决方案--------------------
探讨
是用LINQ,不是传统的sql

------解决方案--------------------
DataTable dt = new DataTable();
dt.Columns.Add("字段1",typeof(string));
dt.Columns.Add("字段2", typeof(string));
dt.Columns.Add("字段3", typeof(decimal));
dt.Rows.Add("aa","bb",6);
dt.Rows.Add("aa","bb",6.5);
dt.Rows.Add("aa","bb",5);
dt.Rows.Add("cc","dd",7);
dt.Rows.Add("cc","dd",6);
dt.Rows.Add("ee", "ff", 9);
var source = from temp in dt.AsEnumerable() group temp by new { 字段1 = temp.Field<string>("字段1"), 字段2 = temp.Field<string>("字段2") } into g select new { 字段1 = g.Key.字段1, 字段2 = g.Key.字段2, 字段3 = g.Max(t => t.Field<decimal>("字段3")) };
foreach (var s in source)
{
Response.Write("<br/>");
Response.Write(s.字段1 + " " + s.字段2 + " " + s.字段3);
}