你能帮我用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
从上面的语句中,如果有多次出现,我想选择除第一个之外的每一个记录。
当前回答
这是我喜欢的一个有趣的SQL Server 2005解决方案。我将假设“对于除第一条记录外的每条记录”,您的意思是还有另一个“id”列,我们可以使用它来确定哪一行是“第一行”。
SELECT id
, field1
, field2
, field3
FROM
(
SELECT id
, field1
, field2
, field3
, RANK() OVER (PARTITION BY field1, field2, field3 ORDER BY id ASC) AS [rank]
FROM table_name
) a
WHERE [rank] > 1
其他回答
试试这个查询,每个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
这是我喜欢的一个有趣的SQL Server 2005解决方案。我将假设“对于除第一条记录外的每条记录”,您的意思是还有另一个“id”列,我们可以使用它来确定哪一行是“第一行”。
SELECT id
, field1
, field2
, field3
FROM
(
SELECT id
, field1
, field2
, field3
, RANK() OVER (PARTITION BY field1, field2, field3 ORDER BY id ASC) AS [rank]
FROM table_name
) a
WHERE [rank] > 1
你也可以尝试这个查询来计数一个不同的()列,并根据你想要的列进行排序:
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
要查看重复值:
with MYCTE as (
select row_number() over ( partition by name order by name) rown, *
from tmptest
)
select * from MYCTE where rown <=1