数据库中记录了工人每天的计件数量,一个月中可能某些天某工人没有数量记录,如何从数据库中导出所有工人某个月各天的计件数量,没有记录的那天计件数量显示0.数据库

解决方案 »

  1.   

    select uid, date,sum(num) as num from table
    where date >=@StartDate And date < @EndDate
    group by uid,date
    order by uid,dateList<Entity> list;//假定读取出来的数据集
    DateTime startDay = new DateTime(Now.Year,Now.Month,1);//对应sql的@StartDate
    DateTime endDay = firstDay.AddMonth(1);//对应sql的@EndDate
    //读取填充list
    int monthDays = (endDay - firstDay).Days;
    var query = from e in list
      group e by e.Uid into g
      select g;foreach(var g in query)
    {
       for(int i=1;i<=monthDays;i++)
       {
          DateTime compareDay = new DateTime(Now.Year,Now.Month,i);
          Entity entity = list.Where(e=>e.Date==compareDay).FirstOrDefault();
          if(entity==null)
          {
             list.Add(new Entity(){Uid=g.Key,Date=compareDay,Num=0});
          }
       }
    }
    //补充:如果某些人一个月内都没记录,这样是查不到的,所以如果又必须要,还需要与员工表作对比
    //排序
      

  2.   

    Entity entity = list.Where(e=>e.Date==compareDay).FirstOrDefault();这个要改成Entity entity = g.Value.Where(e=>e.Date==compareDay).FirstOrDefault();
      

  3.   

    当然上面两个循环效率上还可以进行优化如
    foreach(var g in query)
    {
       if(g.Value.Count<monthDays))
       {

         for(int i=1;i<=monthDays;i++)
         {}
       }这一段
      

  4.   

    可以这样:
    第一步,一次性取出所有该月该工人录入的数据,方法应该不用说了,假如结果集是List<Product> products
    第二步,循环显示每天的记录,象这样:
    //先获取该月总天数
    var days=DateTime.DaysInMonth(2013,10);
    for(int i=1;i<=days;i++){
    //i号的件数就是 products.Where(p=>p.日期.Day==i).Sum(p=>p.件数);
    }
    =================================================================
    ASP.NET MVC免费分页控件MvcPager 2.0版发布,功能更强大,欢迎使用:
    http://www.webdiyer.com/mvcpager/
      

  5.   

    完全无视我写的代码啊伤心了。具体怎么显示这个就是看你想要如何显示了啊反正就是构造成html的过程