通过很长的一条sql语句将三个表中left join 得到一个结果,填充到dataTalbe然后绑定给datagridview,datagridview看到的数据如下->
日期            点击量    对话量   有效对话量    预约量     预计到诊量    实际到诊量
.
..
...
2012-01-17        2000     700         40         30          300           8
2012-01-18  1000     200         50         40         280           10  
...
..
.
我现在要对这个dataTable进行一定的处理,最终想得到下面这个样子->  时间段       点击量    对话量     有效对话量    预约量     预计到诊量    实际到诊量
   今天         1000       200         50            40         280           10 
   昨天         2000       700         40            30         300            8
   近一周        6000      2000        1000          100         600          50
   当月         24000      8000        4000          412        20000         303
   上月         25000      9000        4500          500         21000        400
   当年        300000      108000      54000        6000         220000       4800
应该如何对dataTalbe进行处理呢?希望高手指点或给个思路附项目中填充dataTable的代码->private DataView GetOrderComeAnalysis()
        {
            List<OrderComeAnalysisModel> ocamList = ocabll.GetOrderComeAnalysisInfo();            //建立DataTalbe
            DataTable dtEmployeePerformanceCount = new DataTable("Table_OrderComeAnalysis");
            dtEmployeePerformanceCount.Columns.Add("医院", System.Type.GetType("System.String"));
            dtEmployeePerformanceCount.Columns.Add("日期", System.Type.GetType("System.DateTime"));
            dtEmployeePerformanceCount.Columns.Add("点击量", System.Type.GetType("System.Int32"));
            dtEmployeePerformanceCount.Columns.Add("对话量", System.Type.GetType("System.Int32"));
            dtEmployeePerformanceCount.Columns.Add("有效对话量", System.Type.GetType("System.Int32")); 
            dtEmployeePerformanceCount.Columns.Add("预约量", System.Type.GetType("System.Int32"));
            dtEmployeePerformanceCount.Columns.Add("预计到诊量", System.Type.GetType("System.Int32"));
            dtEmployeePerformanceCount.Columns.Add("到诊量", System.Type.GetType("System.Int32"));
     
            //添加数据
            for (int i = 0; i < ocamList.Count; i++)
            {
                DataRow dr = dtEmployeePerformanceCount.NewRow();                if (ocamList[i].ProjectId != 0)
                    dr["医院"] = dd.dicProject[ocamList[i].ProjectId];
                dr["日期"] = ocamList[i].Date;
                dr["预约量"] = ocamList[i].OrderCount;
                dr["到诊量"] = ocamList[i].ComeCount;
                dr["预计到诊量"] = ocamList[i].ForecastComeCount;
                dr["点击量"] = ocamList[i].ClickAmount;
                dr["对话量"] = ocamList[i].LocalAllCount + ocamList[i].NoLocalAllCount;
                dr["有效对话量"] = ocamList[i].LocalValidCount + ocamList[i].NoLocalValidCount;
                dtEmployeePerformanceCount.Rows.Add(dr);
            }
            return new DataView(dtEmployeePerformanceCount);
        }界面显示时以医院名称进行筛选->  dv.RowFilter = string.Format("医院='{0}'", cmb_hospitalName.Text);//过滤希望高手帮帮忙看看我这个功能应该怎么实现,谢谢了先!!!!

解决方案 »

  1.   

    第一,拼sql时,就处理好日期字段,sql的功能应该可以满足,可以写存储过程
    第二,得到datable后,自己逐条处理
      

  2.   

    同意楼上的  foreach  datatable   一行一行的处理下
      

  3.   

    使用select sum(...)进行统计
      

  4.   

    有些可以在datatable中进行处理,比如求和,按字段升序降序排列
    日期在数据库去处理
    datatable.select("点击量 ASC,对话量 ASC,"),
      

  5.   

    可以在SQL中进行处理,也可以在程序中循环处理
      

  6.   

    眼下时间比较紧张 sql已经够复杂了 不想再考虑sql拼接了 打算循环处理
      

  7.   

    写到一半了 高手看看我这样做合理么->     //近一周用到的变量
                    int 点击量 = 0;
                    int 对话量 = 0;
                    int 有效对话量 = 0;
                    int 预约量 = 0;
                    int 预计到诊量 = 0;
                    int 到诊量 = 0;                for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        if (Convert.ToDateTime(dt.Rows[i]["日期"]) == DateTime.Now.Date)
                        {
                            newDT.Rows[0]["医院"] = dt.Rows[i]["医院"];
                            newDT.Rows[0]["时间段"] = "今天";
                            newDT.Rows[0]["点击量"] = dt.Rows[i]["点击量"];
                            newDT.Rows[0]["对话量"] = dt.Rows[i]["对话量"];
                            newDT.Rows[0]["有效对话量"] = dt.Rows[i]["有效对话量"];
                            newDT.Rows[0]["预约量"] = dt.Rows[i]["预约量"];
                            newDT.Rows[0]["预计到诊量"] = dt.Rows[i]["预计到诊量"];
                            newDT.Rows[0]["到诊量"] = dt.Rows[i]["到诊量"];
                        }                    if (Convert.ToDateTime(dt.Rows[i]["日期"]) == DateTime.Now.Date.AddDays(-1))
                        {
                            newDT.Rows[1]["医院"] = dt.Rows[i]["医院"];
                            newDT.Rows[1]["时间段"] = "昨天";
                            newDT.Rows[1]["点击量"] = dt.Rows[i]["点击量"];
                            newDT.Rows[1]["对话量"] = dt.Rows[i]["对话量"];
                            newDT.Rows[1]["有效对话量"] = dt.Rows[i]["有效对话量"];
                            newDT.Rows[1]["预约量"] = dt.Rows[i]["预约量"];
                            newDT.Rows[1]["预计到诊量"] = dt.Rows[i]["预计到诊量"];
                            newDT.Rows[1]["到诊量"] = dt.Rows[i]["到诊量"];
                        }                    if (Convert.ToDateTime(dt.Rows[i]["日期"]) <= DateTime.Now.Date && Convert.ToDateTime(dt.Rows[i]["日期"]) > DateTime.Now.Date.AddDays(-7))
                        {
                            newDT.Rows[2]["医院"] = dt.Rows[i]["医院"];
                            newDT.Rows[2]["时间段"] = "近一周";                        点击量 += Convert.ToInt32(dt.Rows[i]["点击量"]);
                            对话量 += Convert.ToInt32(dt.Rows[i]["对话量"]);
                            有效对话量 += Convert.ToInt32(dt.Rows[i]["有效对话量"]);
                            预约量 += Convert.ToInt32(dt.Rows[i]["预约量"]);
                            预计到诊量 += Convert.ToInt32(dt.Rows[i]["预计到诊量"]);
                            到诊量 += Convert.ToInt32(dt.Rows[i]["到诊量"]);                        newDT.Rows[2]["点击量"] = 点击量;
                            newDT.Rows[2]["对话量"] = 对话量;
                            newDT.Rows[2]["有效对话量"] = 有效对话量;
                            newDT.Rows[2]["预约量"] = 预约量;
                            newDT.Rows[2]["预计到诊量"] = 预计到诊量;
                            newDT.Rows[2]["到诊量"] = 到诊量;
                        }
                    }
      

  8.   

    1,今天昨天,肯定有且只有一条数据么?  如果多条或0条,方法不行。
    2。变量这么用,那当月,上月,当年咋办?
    3。Convert.ToDateTime(dt.Rows[i]["日期"]) == DateTime.Now.Date  能相等么?
      

  9.   

    在SQL中处理的话,就是把结果集存成临时表然后对临时表进行汇总统计 根据指定日期, 如果不是很复杂的话,甚至临时表都可以省略临时表的内容就是你现在DataTable 的内容C# 中的话 也是一样,可以用 linq 也可以用 DataTable 自己的方法进行sum
      

  10.   

    1.一天一条 本身提取出来的就是汇总后的数据 每天一条
    2.再加几个变量 就在近一周变量那块那块加绩个
    3.我测试了 是相等的啊 ,日期字段已经在sql中进行处理了。什么时候会出现不相等的情况?
      

  11.   


    那问题不大      直接对变量积记,不需要每次都往datatable中写数据了 .