通过读取后数据库,得到的DataSet 如下作者  持股建议  数量统计
111   回避        3
111   减持        2
222   回避        4
222   增持        3
333   减持        1
333   回避        2其中持股建议的类型是随时变动的;希望最后绑定的DataGrid 上后变成作者  增持  减持  回避  合计
111    0     2     3     5
222    3     0     4     7
333    0     1     2     3
总计   3     3     9     15非常需要大家的帮助谢谢!!!!

解决方案 »

  1.   

    这个主要是sql 语句的问题(查一下case命令)
    CASE 持股建议 WHEN '回避' THEN
      

  2.   

    select t0.作者,t1.amount1,t2.amount2,t3.amount3,t0.total From (select 作者,sum(数量统计) total From table1 group by 作者) tb0
    Left join( select 作者,数量统计 amount1 from table1 where 持股建议='增持') t1 on table1.作者=t1.作者 
    Left join( select 作者,数量统计 amount2 from table1 where 持股建议='减持') t2 on table1.作者=t2.作者 
    Left join( select 作者,数量统计 amount3 from table1 where 持股建议='回避') t3 on table1.作者=t3.作者
      

  3.   

    然后再加2步处理:
    1)通过“select 持股建议,sum(数量统计) from Table1 group by 持股建议 ”统计合计
       在刚才得到的DataTable1中手动添加一行
      DataRow dr = DataTable1.NewRow();
      dr[0] = "合计";
      dr[1] = ....
      ...
      DataTable1.Rows.Add(dr);
      然后绑定DataGrid得到:
    作者  增持  减持  回避  合计
    111          2     3     5
    222    3           4     7
    333          1     2     3
    总计   3     3     9     152)最后在DataGrid的ItemDataBound事件处理一下空格,
    当然,如果你已经使用了CASE ... WHEN .. 语句进行SQL查询处理null的话就不需要下面这步了
      if(e.Item.ItemIndex>0)
      {
          if(e.Item.Cells[1].Text == " ") e.Item.Cells[1].Text =0;
         .........
      }
      

  4.   

    上面的朋友,您的答案很好,可是有一点我要说明,持股建议的类型数量或种类是随时变动的,也就是说下表的内容在当前是不变的,但下次运行后就不一定是这些数据了,这里显示的只是从数据库中读出的临时数据放在DataSet 中作者  持股建议  数量统计
    111   回避        3
    111   减持        2
    222   回避        4
    222   增持        3
    333   减持        1
    333   回避        2
      

  5.   

    请帮忙看一下:http://community.csdn.net/Expert/topic/3542/3542686.xml?temp=.0663721
      

  6.   

    上面的朋友,您的答案很好,可是有一点我要说明,持股建议的类型数量或种类是随时变动的,也就是说下表的内容在当前是不变的,但下次运行后就不一定是这些数据了,这里显示的只是从数据库中读出的临时数据放在DataSet 中
    ------------------------------------------那就需要动态生成列了:
    1)首先从数据库中读出3个DataTable,
       dt1 :  select 作者,sum(数量统计) totalPerple from table1 group by 作者
       dt2 :  select 作者,持股建议,sum(数量统计) amount from table1 group by 作者,持股建议
       dt3 :  select 持股建议,sum(数量统计) totalSum from table1 group by 持股建议
       把这3个DataTable保存在ViewState里,其中dt1用来绑定DataGrid;2)动态添加绑定列:
       在Page_Load里加入以下代码
       for(int i=0;i<dt3.Rows.Count;i++)
       {
                   BoundColumn tmpColumn = new BoundColumn();
                    tmpColumn.HeaderText = dt3.Rows[i]["持股建议"].ToString();
                    this.dg.Columns.AddAt(1+i,tmpColumn);
       }3)在DataGrid的ItemDataBound事件里
      if(e.Item.ItemIndex>0)
      {
          string perpoName = e.Item.Cells[0].Text;
          for(int i=0;i<dt3.Rows.Count;i++)
          {
             string typeName = dt3[i]["持股建议"].ToString();
             DataRow[] tmpRows = dt2.Select("作者='"+peopleName+"' and 持股建议='"+typeName+"'");
            if(tmpRows.Length>0)
                e.Item.Cells[1+i].Text = tmpRows[0][1].ToString()
            else
                e.Item.Cells[1+i].Text = "0";
          }
      }
      

  7.   

    最后“合计”行怎么处理可以参考前面给的代码;绑定完成就可以请空保存3个DataTable的在ViewState了