Selectionner les lignes qui ont la valeus fréquante

Bonjour,

j'ai besoin d'une requête sql qui sélectionne les ligne qui ont la valeur fréquente pour chaque attribut un exemple pour mieux comprendre

ID nombre machin
1 16 pouet
2 32 plop
3 16 blah!
4 54 fichtre
5 32 diantre
6 8 amphigourique
7 16 seize
8 63 klaxon
9 12 thiéfaine
10 78 progressif
11 12 plop

la requete doit m'afficher
ID nombre machin
1 16 pouet
3 16 blah!
7 16 seize
2 32 plop
11 12 plop

2 réponses

  1. Bonjour,

    Cela n'a rien de trivial (si j'ai bien compris).

    J'essaierais quelque chose de ce goût-là :
    SELECT t.ID, t.Nombre, t.Machin
    FROM ma_table t
    INNER JOIN (
        SELECT Nombre, COUNT(*) as nc FROM ma_table GROUP BY Nombre
    ) n ON n.Nombre = t.Nombre
    INNER JOIN (
        SELECT Machin, COUNT(*) as mc FROM ma_table GROUP BY Machin
    ) m ON m.Machin = t.Machin
    WHERE nc > 1 OR mc > 1
    ORDER BY 
        CASE WHEN nc > mc THEN nc ELSE mc END DESC,
        CASE WHEN nc > mc THEN t.Nombre ELSE -1 END,
        CASE WHEN nc > mc THEN 'zz' ELSE t.Machin END,
        t.Id

    Par contre c'est du bricolage, si tu as 200 champs ça va être super galère...

    Xavier

    (Edit : j'ai modifié le ORDER BY)
    0
    1. merci de m'avoir répondu j'ai appliqué ta requette mais un message d'exeption qui s'affiche " Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll.

      Informations supplémentaires : L'identificateur en plusieurs parties "t.Number_pregnant" ne peut pas être lié."
      0
      1. Bonjour,

        L'erreur indique que tu as utilisé une colonne t.Number_pregnant qui n'existe pas. Vérifie bien ta requête.

        Xavier
        0