现在的表结构是这样的: UserID TestT Manage Marks A0001 能力 admin 10 A0001 能力 suo 9 A0001 能力 yuan 8 A0001 态度 admin 9 A0001 态度 suo 10 A0001 态度 yuan 8 B0001 能力 admin 10 B0001 能力 suo 9 B0001 能力 yuan 8 B0001 态度 admin 7 B0001 态度 suo 8 B0001 态度 yuan 6 现在我要得到这样的结果: UserID TestT MarksTotal A0001 能力 8.9 A0001 态度 8.9 B0001 能力 8.9 B0001 态度 6.9 其中,MarksTotal的分数是这样计算的: admin的分数的30%+suo的分数的30%+yuan的分数的40% 象A0001,B0001这只是编号,还有很多,能力,态度也是其中的一部分,表1的关键字是UserID TestT Manage三个 建议用存储过程 create procedure usp_myprocedure as begin select * into #tmp_admin from YourTable where Manage='admin' select * into #tmp_suo from YourTable where Manage='suo' select * into #tmp_yuan from YourTable where Manage='yuan' select A.UserID, A.TestT,(A.marks * 0.3 + B.marks * 0.3 + C.marks * 0.4) as MarksTotal from #tmp_admin A,#tmp_suo B,#tmp_suo C where A.UserID=B.UserID and A.userID=C.UserID end //未考虑数据不平衡情况 /*CREATE TABLE tblCeShi( UserID VARCHAR(20), TestT VARCHAR(10), Manage VARCHAR(10), Marks INT ) */ SELECT USERId,TestT,sum (case when manage ='admin' then 0.3*Marks when manage='suo' then 0.3*Marks else 0.4*Marks end ) as Marks FROM tblCeShi group by userid,testT select * from tblCeShi