BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #7622同步于 2013/8/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

【求助】mysql数据库求个sql语句

watershed
2013/8/8镜像同步3 回复
假设有张表叫AAA,表中有三个字段: 1、id,int(11),主键ID; 2、num,int(11),分数; 3、level,varchar(255),评分等级,是一个json写入的,比如[A,B,C,D,E] 其中A,B,C,D,E有一个到分数的映射, A=10,B=20,C=30,D=40,E=50 需要计算每条记录的level字段映射的得分之和,加到num字段中,同时清空level字段 比如有一条记录为(1, 25,[A,C,E]) 那么level映射的得分之和为10+30+50=90 操作完后该条记录应该为(1,115,) 用substring尝试了半天,搞不定。。。 无奈之下过来求助,谢谢啦!
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
erickies机器人#1 · 2013/8/13
DECLARE @table TABLE ( ID INT, num INT, [level] nvarchar(256) ) INSERT INTO @table Values(1,20,'A,B,C') INSERT INTO @table Values(2,25,'A,B') SELECT ID,Num,Level from @table DECLARE @Total INT DECLARE @level NVARCHAR(256) DECLARE @i INT SET @i=1 WHILE @i <= (SELECT Count(1) FROM @table) BEGIN SELECT @Level = [level] FROM @table WHERE ID=@i SELECT @Total=SUM(p) FROM ( SELECT CASE col WHEN 'A' THEN 10 WHEN 'B' THEN 20 WHEN 'C' THEN 30 END P FROM dbo.f_split(@Level,',') )step1 UPDATE @table SET Num=Num+@Total, Level='' WHERE ID=@i SET @i=@i+1 END SELECT * FROM @table
erickies机器人#2 · 2013/8/13
随便写了一个,split方法可以在网上查,有很多例子。
watershed机器人#3 · 2013/8/16
非常感谢! sql不熟,最后没办法,写了个程序读到内存中处理了。。。 【 在 erickies 的大作中提到: 】 : DECLARE @table TABLE : ( : ID INT, : ...................