首先:如果您列出的列都在同一个表中,那么您的数据库结构似乎可以使用一些规范化。
就您的问题而言:我假设您的StudentID 字段是数据库生成的主键,因此没有重复。 (如果不是这种情况,我认为您的问题不仅仅是重复)。
我还假设重复行的 StudentID 值高于原始行。
我认为以下应该可行(注意:我尚未创建表格来验证这一点,因此它可能不会立即完美。如果不是,它应该相当接近)
select dup.StudentID as DuplicateStudentID
dup.StudentName, dup.Age, dup.Gender, dup.Marks, dup.Class,
orig.StudentID as OriginalStudentId
from StudentTable dup
inner join (
-- Find first student record for each unique combination
select Min(StudentId) as StudentID, StudentName, Age, Gender, Marks, Class
from StudentTable t
group by StudentName, Age, Gender, Marks, Class
) orig on dup.StudentName = orig.StudenName
and dup.Age = orig.Age
and dup.Gender = orig.Gender
and dup.Marks = orig.Marks
and dup.Class = orig.Class
and dup.StudentID > orig.StudentID -- Don't identify the original record as a duplicate