Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > DataTableHelp > 数据增删改查 >
GroupBy

GroupBy是根据提供的几列对某一列数据进行统计,结果有DataTableHelp类型返回。

语法:

GroupBy(groupOn,agreegateColName,aggregateType)

参数说明

名称 说明
groupOn 必填项,字符串类型,分组依据列的清单。各个列之间用“,”分隔开,例如:Col1,Col2,Name。
agreegateColName 必填项,字符串类型,需要统计的列名称。这里只可以输入一个统计列。如果需要统计多列的,请使用PivotDataTable。
aggregateType 可选项,AggregateTypeEnum类型枚举,统计的类型。默认值为Sum。

///<summary>
///统计函数类型
///</summary>
public enum AggregateTypeEnum
{
    //没有统计
    None = 0,
    //计数
    Count = 1,
    //求和
    Sum = 2,
    //第一个
    First = 3,
    //最后一个
    Last = 4,
    //平均值
    Average = 5,
    //最大值
    Max = 6,
    //最小值
    Min = 7,
    //是否存在
    Exists = 8,
    //样本方差
    Var = 9,
    //样本标准偏差
    Std = 10,
    //总体方差
    VarP = 11,
    //总体标准偏差
    StdP = 12
}

原始数据如下:

Vb.Net
Dim tbl As SmGrid=Proj.CurrentSmGrid
'根据"产品,业务员"进行分组统计"数量"列
Dim dt As DataTableHelp= tbl.DataTableHelp.GroupBy("产品,业务员","数量")
'这是一种Linq表达式的用法显示标题,看不懂的就用下面普通的遍历
Proj.MsgDebug.Add(String.Join("|",dt.DataCols.Select(Of String)(Function(col As ColData) col.Name)))
'遍历标题
Dim strColName As String
For Each col As ColData In dt.DataCols
    strColName=strColName & "|" & col.Name
Next
Proj.MsgDebug.Add(strColName.Trim("|"))
'遍历所有行
For Each dr As RowData In dt.DataRows
    Proj.MsgDebug.Add(String.Join("|",dr.BaseRow.ItemArray))
Next

Proj.MsgDebug.Add("---------下面开始统计计数--------")
'指定统计类型为Count,计数
dt = tbl.DataTableHelp.GroupBy("产品,业务员","数量",AggregateTypeEnum.Count)
'这是一种Linq表达式的用法,看不懂的就用下面普通的遍历
Proj.MsgDebug.Add(String.Join("|",dt.DataCols.Select(Of String)(Function(col As ColData) col.Name)))
'遍历所有行
For Each dr As RowData In dt.DataRows
    Proj.MsgDebug.Add(String.Join("|",dr.BaseRow.ItemArray))
Next

'返回结果:产品|业务员|数量.Sum
'返回结果:产品|业务员|数量.Sum
'返回结果:产品01|业务员03|2262
'返回结果:产品02|业务员03|468
'返回结果:产品03|业务员03|3657
'返回结果:产品04|业务员03|4031
'返回结果:产品05|业务员03|1748
'返回结果:---------下面开始统计计数--------
'返回结果:产品|业务员|数量.Count
'返回结果:产品01|业务员03|5
'返回结果:产品02|业务员03|1
'返回结果:产品03|业务员03|7
'返回结果:产品04|业务员03|8
'返回结果:产品05|业务员03|4

C#
SmGrid tbl = Proj.CurrentSmGrid;
// 根据"产品,业务员"进行分组统计"数量"列
DataTableHelp dt = tbl.DataTableHelp.GroupBy("产品,业务员", "数量");
// 这是一种Linq表达式的用法显示标题,看不懂的就用下面普通的遍历
Proj.MsgDebug.Add(string.Join("|", dt.DataCols.Select(col => col.Name)));
// 遍历标题
string strColName="";
foreach (ColData col in dt.DataCols)
    strColName = strColName + "|" + col.Name;
Proj.MsgDebug.Add(strColName.Trim("|"));
// 遍历所有行
foreach (RowData dr in dt.DataRows)
    Proj.MsgDebug.Add(string.Join("|", dr.BaseRow.ItemArray));

Proj.MsgDebug.Add("---------下面开始统计计数--------");
// 指定统计类型为Count,计数
dt = tbl.DataTableHelp.GroupBy("产品,业务员", "数量", AggregateTypeEnum.Count);
// 这是一种Linq表达式的用法,看不懂的就用下面普通的遍历
Proj.MsgDebug.Add(string.Join("|", dt.DataCols.Select(col => col.Name)));
// 遍历所有行
foreach (RowData dr in dt.DataRows)
    Proj.MsgDebug.Add(string.Join("|", dr.BaseRow.ItemArray));

//返回结果:产品|业务员|数量.Sum
//返回结果:产品|业务员|数量.Sum
//返回结果:产品01|业务员03|2262
//返回结果:产品02|业务员03|468
//返回结果:产品03|业务员03|3657
//返回结果:产品04|业务员03|4031
//返回结果:产品05|业务员03|1748
//返回结果:---------下面开始统计计数--------
//返回结果:产品|业务员|数量.Count
//返回结果:产品01|业务员03|5
//返回结果:产品02|业务员03|1
//返回结果:产品03|业务员03|7
//返回结果:产品04|业务员03|8
//返回结果:产品05|业务员03|4

另外参考“数据查询Demo”中的演示效果。

Vb.Net
Public Sub btnGroupBy_Click(sender As Object,e As  System.EventArgs)
    '分组统计求和
    Dim dt As DataTableHelp= tblMain1.DataTableHelp.GroupBy("产品,业务员","数量")
    tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
    
End Sub
Public Sub btnGroupBy2_Click(sender As Object,e As  System.EventArgs)
    '分组统计计数
    Dim dt As DataTableHelp = tblMain1.DataTableHelp.GroupBy("产品,业务员","数量",AggregateTypeEnum.Count)
    tblResult.DataSource=dt '将结果绑定到tblResult中并显示出来
End Sub

C#
public void btnGroupBy_Click(object sender, System.EventArgs e)
{
    // 分组统计求和
    DataTableHelp dt = tblMain1.DataTableHelp.GroupBy("产品,业务员", "数量");
    tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
}
public void btnGroupBy2_Click(object sender, System.EventArgs e)
{
    // 分组统计计数
    DataTableHelp dt = tblMain1.DataTableHelp.GroupBy("产品,业务员", "数量", AggregateTypeEnum.Count);
    tblResult.DataSource = dt; // 将结果绑定到tblResult中并显示出来
}