日期:2014-05-18  浏览次数:20517 次

sql一次插入多条记录时,希望能够实现指定字段累加1,求解
表HSL_TestPassStatistics数据结构如下:
classId,passSubjectCount

表数据形式如下三组数据
classId, passSubjectCount
组一:
3 1  
3 2  
3 3  
3 4  
3 5  
3 6  
组二:
4 1  
4 2  
4 3  
4 4  
4 5  
4 6  
组三:
5 1  
5 2  
5 3  
5 4  
5 5  
5 6  

期望得到的结果
当插入同一个班级的记录的时候,每次新插入相同班级的记录是,新增的记录的passSubjectCount字段值能够累加1

要求插入方式采用如下形式,一条语句实现,不能采用循环方
以下写法不正确,但希望能够达到抛砖引玉的效果
INSERT INTO HSL_TestPassStatistics(classId, passSubjectCount)
SELECT classId, 
(
  SELECT COUNT(Id) + 1
FROM TestPassStatistics A
WHERE A.classId = B.ClassId 
)
FROM classTest B

------解决方案--------------------
SQL code

INSERT INTO HSL_TestPassStatistics(classId, passSubjectCount)
SELECT classId,(select max(passSubjectCount) from HSL_TestPassStatistics where classid=b.classid)+row_number() over(order by getdate() )  
FROM classTest b where b.classid='1'

------解决方案--------------------
SQL code
INSERT INTO HSL_TestPassStatistics(classId, passSubjectCount)
SELECT classId,(select max(passSubjectCount) from TestPassStatistics a 
where a.classid=b.classid)+row_number() over(partition by classId order by (select 0)) nexsque  
FROM #HSL_TestPassStatistics b

------解决方案--------------------
探讨
引用:

SQL code
INSERT INTO HSL_TestPassStatistics(classId, passSubjectCount)
SELECT classId,(select max(passSubjectCount) from TestPassStatistics a
where a.classid=b.classid)+row_number() ……

------解决方案--------------------
探讨
那从你觉得合理的角度来看如何设计比较合理

------解决方案--------------------
insert HSL_TestPassStatistics
select @classId ,convert(int, (select max(passSubjectCount) from HSL_TestPassStatistics where classId=@classId) )+1as rr