如何在SQL中查找重复记录?

时间:2010-08-20 21:28:28

标签: sql sql-server tsql sql-server-2008 duplicates

我正在尝试开发一个插入唯一记录的查询,但是在尝试插入重复记录时收到SQL Server主键错误。我能够使用此查询插入一些值,但不能为此记录插入(score_14)。

所以现在我试图通过以下查询找到重复记录。挑战在于我的PK基于3列:StudentID,MeasureDate和MeasureID - 所有这些都来自下面未提到的不同表格。

但这只能让我知道 - 相反,我想只返回带有计数的记录> 1.我该怎么做?

select count(a.score_14) as score_count, A.studentid, A.measuredate, B.measurename+' ' +B.LabelName 
from [J5C_Measures_Sys] A
join [J5C_ListBoxMeasures_Sys] B on A.MeasureID = B.MeasureID 
join sysobjects so on so.name = 'J5C_Measures_Sys' 
join syscolumns sc on so.id = sc.id 
join [J5C_MeasureNamesV2_Sys] v on v.Score_field_id = sc.name
where so.type = 'u' and sc.name = 'score_14' and a.score_14 is not null 
AND A.STUDENTID IS NOT NULL AND A.MEASUREDATE IS NOT NULL AND B.MEASURENAME IS NOT NULL
--and count(a.score_14)>1
group by a.studentid, a.measuredate, B.measurename, B.LabelName, A.score_14
having count(a.score_14) > 1

2 个答案:

答案 0 :(得分:6)

Beth是对的 - 这是我对您的查询的重写:

SELECT a.studentid, a.measuredate, a.measureid
  from [J5C_Measures_Sys] A
GROUP BY a.studentid, a.measuredate, a.measureid
  HAVING COUNT(*) > 1

此前:

SELECT a.studentid, a.measuredate, a.measureid
  from [J5C_Measures_Sys] A
  join [J5C_ListBoxMeasures_Sys] B on A.MeasureID = B.MeasureID 
  join sysobjects so on so.name = 'J5C_Measures_Sys'
                    AND so.type = 'u'
  join syscolumns sc on so.id = sc.id 
                    and sc.name = 'score_14' 
  join [J5C_MeasureNamesV2_Sys] v on v.Score_field_id = sc.name
 where a.score_14 is not null  
   AND B.MEASURENAME IS NOT NULL
GROUP BY a.studentid, a.measuredate, a.measureid
  HAVING COUNT(*) > 1

答案 1 :(得分:1)

如果要计算它,你需要将A.score_14从你的group by子句中删除