先学学SQL的基本语句吧,group by

解决方案 »

  1.   

    楼上正解,我昨天刚刚写过一个,就一个Group By 就搞定了~
      

  2.   

    能具体指点下吗?就我这个情况,Group By 语句该怎么写呢?谢谢!
      

  3.   

    string strSQL = "SELECT COUNT (Group_name) FROM table_4 Group By Group_name
      

  4.   

    string strConn = "Data Source=127.0.0.1;Initial Catalog=zy;User ID=sa;Password=229107my229107m";
                SqlConnection ConnAcc = new SqlConnection(strConn);
                ConnAcc.Open();
                string strSQL = "SELECT COUNT (Group_name) FROM table_4 Group By Group_name";
                SqlCommand cmd = new SqlCommand(strSQL, ConnAcc);
                int intNum = (int)cmd.ExecuteScalar();
                ConnAcc.Close();请问:这样的程序可以实现计数功能吗?并把结果给intNum?可是我执行时发现intNum的数据是0x00000000,一直都是这样,这是怎么回事呢?
      

  5.   

    把这句  int intNum = (int)cmd.ExecuteScalar(); 改成object intNum = (int)cmd.ExecuteScalar(); 试试
      

  6.   

    不行,因为我后面的程序需要if比较大小,if(intNum>gate),而大于号不能用于object和int类型之间,该怎么办呢?还有其他解决方法吗?
      

  7.   

    你可以建一个数据集DataSet,返回一个table,table里就返回一个汇总出来的字段,然后在比较也是ok的!
      

  8.   

    string strSQL = "SELECT distinct(Group_name) FROM table_4 ";
    dt=db.getDt(strSQL);
    db.close();
    if(dt.Rows.Count>0)

    for(int i=0;i<dt.Rows.Count;i++)
    {
       String sql2="select GK from table_4 where group_name='"+dt.Rows[i]["group_name"].ToString+"'";
        dt2=db.getDt(sql2);
         db.close();
        if(dt2.Rows.Count>8)
        {
        // 你想干嘛
        }
    }
    基本思路就这样好久没写了
     }
      

  9.   

    请问dt,db,dt2是哪儿来的?这样写会出很多错,请问能具体完整些写吗?因为我是初学者,不太懂,还有就是有提示说“+”不能应用于string和方法组类型的操作数,那么那句话又要怎么改呢?
      

  10.   

    强制转换成int如果需要强制转换,那又何必多此一举把int变成object呢?这样改是什么意思我不太明白,因为我是初学者,能解释下吗?谢谢!
      

  11.   

    强制转换成int如果需要强制转换,那又何必多此一举把int变成object呢?这样改是什么意思我不太明白,因为我是初学者,能解释下吗?谢谢!

    我没看你上面的代码,直接看了你下面的疑问,你首先把你的sql语句也就是SELECT COUNT (Group_name) FROM table_4 Group By Group_name丢数据库执行下,看是不是出来结果先,再来分析你的代码
      

  12.   

    写错了那句,应该是dt.Rows[i]["group_name"].ToString()+
    dt是指DataTable啊,你可以自己命名自己的,dt2就是第2个datable了,db就是你打开进行数据库访问的连接,getDt是指你获得数据的事物,比如如下,,sqlconnection myConnection=new sqlconnection(""); //你的连接字符串
    protect void tongji(object sender, EventArgs e)
    {
    string strSQL = "SELECT distinct(Group_name) FROM table_4 ";
    Datable dt=new Datable();
    myConnection.open();
    dt=myConnection.getDt(strSQL,);
    myConnection.close();
    if(dt.Rows.Count>0)

    for(int i=0;i<dt.Rows.Count;i++)
    {
       String sql2="select GK from table_4 where group_name='"+dt.Rows[i]["group_name"].ToString()+"'";
    Datable dt2=new Datable();
    myConnection.open();
        dt2=myConnection.getDt(sql2);
         myConnection.close();
        if(dt2.Rows.Count>8)
        {
        // 你想干嘛
        }
    if(dt2.Rows.Count<8)
        {
        // 你想干嘛
        }
    }
      public DataTable getDT(string sql)
    {
    SqlDataAdapter mySqlDataAdapter=new SqlDataAdapter(sql,myConnection);
    DataTable myDataTable=new DataTable();
    mySqlDataAdapter.Fill(myDataTable);
    return myDataTable;
    }大概就这样吧,你自己灵活用下
      

  13.   

    15楼的方法是可以实现分类统计是吗?就是分别计算出Group_name为1的有过少个,Group_name为2的有多少个。是吗?然后把他们与8来比较对吧?对了,还有这句话='"dt.Rows[i]["group_name"].ToString()+"'";会出错提示说:“只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句”,这是什么问题?该怎么改呢?
      

  14.   

    把它前面的String改为小写string
      

  15.   


    这样还是错的呀,同样的错误呀,对了,15楼的方法是可以实现分类统计是吗?就是分别计算出Group_name为1的有过少个,Group_name为2的有多少个。是吗?然后把他们与8来比较对吧?
      

  16.   


    这样这句“dt=myConnection.getDT(strSQL);”会提示错误 “System.Data.SqlClient.SqlConnection”不包含“getDT”的定义,并且找不到可接受类型为“System.Data.SqlClient.SqlConnection”的第一个参数的扩展方法“getDT”(是否缺少 using 指令或程序集引用?) 这是为什么?怎么改错呢?   
    还有就是“ dt.Rows[n]["Group_name"].ToString()+ "'";”这句提示错误:只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句,这又该怎么改呢?
      

  17.   

    string strConn = "Data Source=127.0.0.1;Initial Catalog=zy;User ID=sa;Password=229107my229107m";
    SqlConnection ConnAcc = new SqlConnection(strConn);
    ConnAcc.Open();
    string strSQL = "SELECT COUNT (Group_name) FROM table_4 Group By Group_name";
    SqlDataAdapter sd = new SqlDataAdapter(strSQL, ConnAcc);
    DataSet ds = new DataSet();
    sd.Fill(ds);
    DataTable dt = ds.Tables[0];
    for(int i=0;i<dt.Rows.Count;i++)
                {
                 int a= (int) dt.Rows[i][0].ToString();
    if(a>8)
    {
    //
    }
    if(a<8)
    {
    //
    }
                }
                ConnAcc.Close();
    刚刚吃完饭,顺手帮你上面改了下,我没有调试,你试下有错的话断点后,把错误信息贴上来
      

  18.   

    分组统计的话,楼主也可以试试guoup by rollup
      

  19.   

    int a= (int) dt.Rows[n][0].ToString();这句出错了,提示说:无法将类型“string”转换为“int”, 这要怎么改呢?
      

  20.   

    int a= (int) dt.Rows[n][0].ToString();这句出错了,提示说:无法将类型“string”转换为“int”, 这要怎么改呢?
    我晕,你这点调试都不会噢,Convert.ToInt32(dt.Rows[n][0].ToString());
      

  21.   

    23楼威武,太谢谢了!对了,这样的方法是可以实现分类统计是吗?就是分别计算出Group_name为1的有过少个,Group_name为2的有多少个。是吗?然后把他们与8来比较对吧?(因为现在没在实验室,不能和加扰机连接测试,不知道能不能实现这个功能。。)
      

  22.   


    1  你首先要理解ExecuteScalar()这个方法的意义的返回值是什么。。
    2  我觉得你的这个不能用到这个方法,返回一个数据集最好吧。。
      

  23.   


    请问:这样的方法是可以实现分类统计是吗?就是分别计算出Group_name为1的有过少个,Group_name为2的有多少个。是吗?然后把他们与8来比较对吧?(因为现在没在实验室,不能和加扰机连接测试,不知道能不能实现这个功能。。)
      

  24.   


    请问:这样的方法是可以实现分类统计是吗?就是分别计算出Group_name为1的有过少个,Group_name为2的有多少个。是吗?然后把他们与8来比较对吧?(因为现在没在实验室,不能和加扰机连接测试,不知道能不能实现这个功能。。)
    应该可以,我没调试,等你去调试出问题再来探讨,或者私我
      

  25.   

    好的,我们现在放寒假了,估计要一个月后才能去实验室,我刚单步运行了一下,发现这句“for(int n=0;n<dt.Rows.Count;n++)”中dt.Rows.Count的值为0x00000009,为什么只到9呢?数据库的那张table_4表格有100行呢,怎么只计数到9呢?
      

  26.   

    好的,我们现在放寒假了,估计要一个月后才能去实验室,我刚单步运行了一下,发现这句“for(int n=0;n<dt.Rows.Count;n++)”中dt.Rows.Count的值为0x00000009,为什么只到9呢?数据库的那张table_4表格有100行呢,怎么只计数到9呢?

    group by 了嘛,分组了,估计就只有9组,你看看是不是,你也不用去实验室,自己电脑上装个vs就可以自己搞了
      

  27.   

    我运行了一下,没有提示错误,但是也不能实现功能,就是说没有显示连接成功可以发送数据,而且会直接跳转到if(a<8)那部分的程序,大于8 的程序进不去,就说明没有运行成功,不太清楚是什么问题,就是点击button按钮,就卡在那儿不动了,什么都没有显示。。然后我打断点单步运行时,发现在if(a>8)后就跳出来到(a<8)的地方了,还有就是想问下,group by分组是按照什么来分组的?是按照Group_name一样的分为一组吗?那我的数据库表里只设置了8种Group_name,为什么会是9呢?是按照什么来分组的呢?
      

  28.   

    我运行了一下,没有提示错误,但是也不能实现功能,就是说没有显示连接成功可以发送数据,而且会直接跳转到if(a<8)那部分的程序,大于8 的程序进不去,就说明没有运行成功,不太清楚是什么问题,就是点击button按钮,就卡在那儿不动了,什么都没有显示。。然后我打断点单步运行时,发现在if(a>8)后就跳出来到(a<8)的地方了,还有就是想问下,group by分组是按照什么来分组的?是按照Group_name一样的分为一组吗?那我的数据库表里只设置了8种Group_name,为什么会是9呢?是按照什么来分组的呢?