你能帮我用SQL语句在多个字段上找到重复吗?
例如,在伪代码中:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
从上面的语句中,如果有多次出现,我想选择除第一个之外的每一个记录。
你能帮我用SQL语句在多个字段上找到重复吗?
例如,在伪代码中:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
从上面的语句中,如果有多次出现,我想选择除第一个之外的每一个记录。
当前回答
你也可以尝试这个查询来计数一个不同的()列,并根据你想要的列进行排序:
select field1, field2, field3, count(distinct (field2))
from table_name
group by field1, field2, field3
having count(field2) > 1
order by field2;
其他回答
CREATE TABLE #tmp
(
sizeId Varchar(MAX)
)
INSERT #tmp
VALUES ('44'),
('44,45,46'),
('44,45,46'),
('44,45,46'),
('44,45,46'),
('44,45,46'),
('44,45,46')
SELECT * FROM #tmp
DECLARE @SqlStr VARCHAR(MAX)
SELECT @SqlStr = STUFF((SELECT ',' + sizeId
FROM #tmp
ORDER BY sizeId
FOR XML PATH('')), 1, 1, '')
SELECT TOP 1 * FROM (
select items, count(*)AS Occurrence
FROM dbo.Split(@SqlStr,',')
group by items
having count(*) > 1
)K
ORDER BY K.Occurrence DESC
试试这个查询,每个SELECT语句都有一个单独的计数:
select field1, count(field1) as field1Count, field2,count(field2) as field2Counts, field3, count(field3) as field3Counts
from table_name
group by field1, field2, field3
having count(*) > 1
要获得包含多条记录的字段列表,可以使用..
select field1,field2,field3, count(*)
from table_name
group by field1,field2,field3
having count(*) > 1
有关如何删除行的更多信息,请查看此链接。
http://support.microsoft.com/kb/139444
在使用上面链接中的方法之前,应该有一个标准来决定如何定义“第一行”。在此基础上,如果需要,您将需要使用order by子句和子查询。如果你能发布一些样本数据,那将会很有帮助。
你提到了“第一个”,所以我假设你对你的数据有某种排序。让我们假设您的数据是按某个字段ID排序的。
这个SQL将为您提供除了第一个以外的重复条目。它基本上选择存在(a)字段相同且(b) ID较低的另一行的所有行。性能不会很好,但可能会解决您的问题。
SELECT A.ID, A.field1, A.field2, A.field3
FROM myTable A
WHERE EXISTS (SELECT B.ID
FROM myTable B
WHERE B.field1 = A.field1
AND B.field2 = A.field2
AND B.field3 = A.field3
AND B.ID < A.ID)
你也可以尝试这个查询来计数一个不同的()列,并根据你想要的列进行排序:
select field1, field2, field3, count(distinct (field2))
from table_name
group by field1, field2, field3
having count(field2) > 1
order by field2;