2017-01-06 2 views
0

У меня есть таблица с несколькими повторами в col1:Как выбрать все строки с дублированным значением столбца в SQL

co1, col2, col3 
a, d, f 
r, h, d 
e, g, h 
z, k, m 
e, s, t 
a, b, c 
e, k, t 

Благодаря this post, я могу выбрать все COL1 значения, которые повторяются

SELECT col1 
FROM mytable 
GROUP BY col1 
HAVING (COUNT(col1) > 1) 

Как я могу выбрать все строки с повторным значением col1 и упорядочить их с помощью col1? Ожидаемый результат выглядит следующим образом:

co1, col2, col3 
a, d, f 
a, b, c 
e, g, h 
e, s, t 
e, k, t 
+0

Спасибо всем за ответы. Я принял @ Prdp's, поскольку он является самым полным, и он/она первым предложила использовать -partition by. – Nic

ответ

2

Использование EXISTS

SELECT * 
FROM mytable a 
WHERE EXISTS (SELECT 1 
       FROM mytable b 
       WHERE a.col1 = b.col1 
       HAVING Count(col1) > 1) 
Order by col1 

Другой способ

SELECT * 
FROM (SELECT *, 
       Count(1)OVER(partition BY col1) AS cnt 
     FROM mytable) a 
WHERE cnt > 1 
ORDER BY col1 
1

Вы можете Inner Join результат с исходной таблицы, как это:

select t1.* 
from your_table t1 
inner join (
    select col1 
    from your_table 
    group by col1 
    having count(col1) > 1) t2 
on t1.col1 = t2.col1 
order by t1.col1; 
1

Вы можете использовать функцию окна для этого:

select co1, col2, col3 
from (
    select co1, col2, col3, count(*) over (partition by col1) as cnt 
    from the_table 
) t 
where cnt > 1 
order by col1; 
1
Select * 
From (Select * ,count(*) over (Partition By Col1) as cnt from t) t 
Where cnt>1 
1
 Select co1,col2,col3 From 
    (Select * ,count(*) over (Partition By Co1) as cnt from #b) a 
Where cnt>1 
Смежные вопросы