我有两个字段分别是  参与员工 和 得分参与员工字段存放参与员工的姓名,形式为 a,b,c 个数不定,起码一个,最多5个
得分字段存放每个员工得到的工分,形式为 2,2,3 与员工字段里的名字一一对应.现在如果想统计表里存放的a员工的总得分,要如何处理呢?我的想法是
1.用sql语句取出字段"参与员工"包含有a员工姓名的记录并做成循环;
2.在循环体内判断a员工在"参与员工"字段里的位置
3.根据该位置取出"得分"字段里的分数
4.记录.movenext想归想,怎么也写不出符合自己意思的代码,哪位大哥大姐能帮忙一下?

解决方案 »

  1.   

    select sum(得分) from Table groub by 参与员工
      

  2.   

    第一步的sql语句应该没问题吧??
    select * from table where 参与员工 like '5,%' or 参与员工 like '%,5' or 参与员工 like '%,5,%'
    第二步:可以用split把参与员工字符串分开
    然后循环数组
    找到位置
    然后再把得分字符串用split也分开
    找到相应的值并保存
    循环第二步
    把保存的值相加就可以了
      

  3.   

    ArrayList进行一下循环一下就出来了
      

  4.   

    create table tblTest(PdID varchar(100),PdName varchar(100))insert tblTest
    select '1','1'           union all
    select '2/d','3/4'      union all
    select 'e/g/f','7/8/9' union all
    select 'k','5'          union all
    select 'r','6'
    select * from tblTest
    go-- 建立一个辅助的临时表就可以了
    SELECT TOP 8000
    id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b    select * from #
    SELECT 
        
        PdID=SUBSTRING(A.PdID, B.ID, CHARINDEX('/', A.PdID + '/', B.ID) - B.ID) , 
        PdName = SUBSTRING(A.PdName, B.ID, CHARINDEX('/', A.PdName + '/', B.ID) - B.ID) 
    FROM tblTest A, # B
    WHERE SUBSTRING('/' + a.PdName, B.id, 1) = '/'  
    GODROP TABLE tblTest, #
      

  5.   

    bjgzxx(食人一族) 的方法不错^_^
      

  6.   

    想请教一下 amnoh(会走路的鱼) 如果是你,你打算怎么设计表呢?
      

  7.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;public partial class csdn_ex_Default : System.Web.UI.Page
    {
        int sum = 0; //定义一个这个员工的得分总数变量 
        protected void Page_Load(object sender, EventArgs e)
        {
            bind();    }
        public void bind()
        {
            SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=;database=你的数据库名");
            cn.Open();
                           //两个字段分别是  参与员工UserName  和 得分
            string mySql = "select * from 表名 where UserName = 'abc'";//你要查询出这个人的姓名就是你说的 a b c的组合了 
            SqlCommand cm = new SqlCommand(mySql, cn);
            SqlDataReader dr = cm.ExecuteReader();
            while (dr.Read())//循环读出来  
            {
                string userName = dr["UserName"].ToString();
                //这里假如是abc的组合就是循环3次 2+2+3= 得分是7分! [a2分][b2分][c3分]
                //如果就是a的话 就循环一次 就2分
                for (int i = 0; i < userName.Length; i++)//userName.Length是统计出这个名称有几位 
                {
                    if (userName[i].ToString() == "a")//员工名的第0个位置的字符是否等于a
                    {
                        sum += 2;
                    }
                    if (userName[i].ToString() == "b")
                    {
                        sum += 2;
                    }
                    if (userName[i].ToString() == "c")
                    {
                        sum += 3;
                    }
                   
                }
            }
            Response.Write(sum);
        }
    }
      

  8.   

    在以上朋友的帮助提示下,总算解决。谢谢大家。 
    临时表的内容我不是很明白
    阿广理解我的意思有一点点偏差。我那个分数是评出来的,不是根据排列的位置固定分值的。不过还是很感谢你提供了代码,给了我不少启示。谢谢。
    以下是我的代码:(根据下拉菜单选择的记者名显示其总得分)
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string connstring = ConfigurationManager.ConnectionStrings["newspingceConnectionString"].ToString();
            SqlConnection cn = new SqlConnection(connstring);
            cn.Open();
            string sqlstr = "select id,news,reporter,score from tnews where reporter like '%" + DropDownList1.SelectedItem.Text + "%'";
            SqlCommand cmd = new SqlCommand(sqlstr, cn);
            SqlDataReader rd = cmd.ExecuteReader();
            int strno=0;      //定义存放 某记者在记者字段里的位置 的容器
            int totalscore=0; //定义总成绩
            while (rd.Read())
            {
                string[] manstr = (rd.GetValue(2).ToString()).Split(','); //rd.GetValue(2)是取出rd数据集里第3个字段的值
                for (int j = 0; j < manstr.Length; j++)
                {
                    if (DropDownList1.SelectedItem.Text == manstr[j].ToString())
                    {
                        strno = j;
                    }
                }
                string[] scorestr = (rd.GetValue(3).ToString()).Split(',');
                totalscore = totalscore + Convert.ToInt32(scorestr[strno]);
                //Response.Write(strno+"<br>");                            //测试用
                //Response.Write(totalscore + "<br>");                     //测试用  
             }
             //Response.Write("************************"+totalscore);      //测试用
        }