我有两个字段分别是 参与员工 和 得分参与员工字段存放参与员工的姓名,形式为 a,b,c 个数不定,起码一个,最多5个
得分字段存放每个员工得到的工分,形式为 2,2,3 与员工字段里的名字一一对应.现在如果想统计表里存放的a员工的总得分,要如何处理呢?我的想法是
1.用sql语句取出字段"参与员工"包含有a员工姓名的记录并做成循环;
2.在循环体内判断a员工在"参与员工"字段里的位置
3.根据该位置取出"得分"字段里的分数
4.记录.movenext想归想,怎么也写不出符合自己意思的代码,哪位大哥大姐能帮忙一下?
得分字段存放每个员工得到的工分,形式为 2,2,3 与员工字段里的名字一一对应.现在如果想统计表里存放的a员工的总得分,要如何处理呢?我的想法是
1.用sql语句取出字段"参与员工"包含有a员工姓名的记录并做成循环;
2.在循环体内判断a员工在"参与员工"字段里的位置
3.根据该位置取出"得分"字段里的分数
4.记录.movenext想归想,怎么也写不出符合自己意思的代码,哪位大哥大姐能帮忙一下?
解决方案 »
- Visual studio 2008发布网站失败是怎么回事?
- ASP.NET多人同时操作数据库SQL2008时,内容会相窜。
- 空页面 location 重新赋值后 如何关闭本页面 ?
- Could not load assembly
- 关于保持登陆的问题
- 为什么看不见我画的图??
- lion说Asp.Net Forums V2中“大量应用缓存以提升系统的性能和浏览速度”,请教大家,体现在哪里?
- [斑竹置顶]你知道 "select .. where name = "+ Request.QueryString["name"]的后果?
- 开发基于PDA(掌上电脑windows CE)的网站
- mvc4中如何获得用户密码?
- 还是关于建立一个网站的软硬件需求,急急
- asp.net2.0的母版怎样运用?
select * from table where 参与员工 like '5,%' or 参与员工 like '%,5' or 参与员工 like '%,5,%'
第二步:可以用split把参与员工字符串分开
然后循环数组
找到位置
然后再把得分字符串用split也分开
找到相应的值并保存
循环第二步
把保存的值相加就可以了
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, #
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);
}
}
临时表的内容我不是很明白
阿广理解我的意思有一点点偏差。我那个分数是评出来的,不是根据排列的位置固定分值的。不过还是很感谢你提供了代码,给了我不少启示。谢谢。
以下是我的代码:(根据下拉菜单选择的记者名显示其总得分)
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); //测试用
}