SQL实现分类汇总流水号

在SQL数据处理中,偶尔会遇到对数据分组,然后进行编号,编号在每一组中都要以1开始。例如,有一正学生表,字段包括主键id,学生姓名,班级编号,学生编号。要求学生编号按照班级号开头,以001为流水号开头,即按照班级编号分组生成流水号,示例代码如下:

-- 学生表
-- ----------------------------
-- Table structure for `student`
-- ----------------------------
CREATE TABLE `student` (`id` int(40) NOT NULL COMMENT '主键',`name` varchar(20) DEFAULT NULL COMMENT '姓名',`classNum` varchar(40) DEFAULT NULL COMMENT '班级编号',`stuNum` varchar(40) DEFAULT NULL COMMENT '学生编号',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 数据
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '张凯凯', '01001', null);
INSERT INTO `student` VALUES ('2', '王江河', '01001', null);
INSERT INTO `student` VALUES ('3', '陈赛', '01001', null);
INSERT INTO `student` VALUES ('4', '姜蓓蓓', '01002', null);
INSERT INTO `student` VALUES ('5', '刘明', '01002', null);
INSERT INTO `student` VALUES ('6', '李海歌', '01003', null);
INSERT INTO `student` VALUES ('7', '薛晓梅', '01003', null);
INSERT INTO `student` VALUES ('8', '刘艳艳', '01004', null);
INSERT INTO `student` VALUES ('9', '李飞', '01005', null);
INSERT INTO `student` VALUES ('10', '刘翔', '01005', null);
INSERT INTO `student` VALUES ('11', '张海', '01005', null);
INSERT INTO `student` VALUES ('12', '温宇飞', '01007', null);

数据截图:

                      

实现SQL

-- 数据生成
SELECT 
s.id,
s.name,
s.classNum,
IF(@num=s.classNum,CONCAT(s.classNum,LPAD(@row:=@row+1,3,0)),CONCAT(s.classNum,LPAD(@row:=1,3,0))) AS stuNum,
@num:=s.classNum AS no_use
FROM student s,(SELECT @row:=0,@num:=0) AS c
ORDER BY s.id

结果截图:

              


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部