类似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]
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
4.6 通过日志查看服务器的运行情况
SQL Server 2005可以将某些系统事件和用户自定义的事件记录到SQL Server错误日志和Windows应用程序日志中。这两种日志都会自动标上时间。
4.6.1 在【事件查看器】中查看服务器的运行情况
SQL Server 2005服务器的启动、关闭和暂停动作,都会产生一个事件记录,这个记录将会记在Windows ......
SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm
例如:
select getdate()
2004-09-12 11:06:08.177
这对于在要不同数据库间转移数据或者习惯oracle日期格式YYYY-MM-DD HH24:MI:SS的人多少有些不方便.
我整理了一下SQL Server里面可能经常会用到的日期格式转换方法:
举例如下:
select CONV ......
今天在上CSDN空间的时候,数据库出错直接抛出SQL文了,消息如下:
MySQL Error
Message
: MySQL Query Error
SQL
: SELECT main.*, field.* from uchome_space main, uchome_spacefield field
WHERE field.sex='1' AND field.uid=main.uid
ORDER BY main.viewnum DESC LIMIT 0,100
Error
: Inco ......