2013-04-17 6 views
1

Si je lanceComment afficher les lignes avec plusieurs hits?

SELECT somecolumn FROM sometable GROUP BY somecolumn HAVING count(*) > 1; 

la sortie des valeurs pour somecolumn qui apparaissent plusieurs fois dans sometable.

Mais je veux voir les lignes (ou des parties d'entre eux) où ces valeurs répétées apparaissent. Par exemple, si foo et bar sont des noms pour les autres colonnes de sometable qui sont d'intérêt, les premières lignes de la sortie peut ressembler à quelque chose comme

somecolumn | foo | bar 
------------------------------- 
123  | foo_1 | bar_2 
123  | foo_3 | bar_5 
123  | foo_7 | bar_11 
234  | foo_13 | bar_17 
234  | foo_19 | bar_23 
... 

etc.

Comment puis-je y parvenir?

+0

Quels rdbms utilisez-vous? – bonsvr

+0

postgres'''''''''' – kjo

Répondre

2

Pour une base de données solution agnostique, vous pouvez le faire:

SELECT * 
FROM sometable S 
WHERE somecolumn IN ( SELECT somecolumn 
         FROM sometable 
         GROUP BY somecolumn 
         HAVING count(*) > 1) 

Pour SQL Server 2005+, vous peut faire ceci:

;WITH CTE AS 
(
    SELECT *, 
      N = COUNT(*) OVER(PARTITION BY somecolumn) 
    FROM sometable 
) 
SELECT * 
FROM CTE 
WHERE N > 1 
0

Vous devez ajouter ces colonnes à la sélection ainsi que le regroupement

SELECT 
    somecolumn, 
    foo, 
    bar 
FROM 
    sometable 
GROUP BY 
    somecolumn, 
    foo, 
    bar 
HAVING count(*) > 1; 
+2

Ce n'est pas ce que veut op. Il/elle veut connaître les valeurs pour les autres colonnes quand seulement une colonne est dupliquée – Lamak

+0

Je vois ce que tu veux dire .. n'a pas lu la question de cette façon initialement .. –

Questions connexes