IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Imbrication et doublons


Sujet :

SQLite

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Imbrication et doublons
    Bonjour à tous !

    Je suis perdu et m'en remets à vous concernant une difficulté rencontrée.

    En effet, je constate dans une "View" (je suis sous sqlite studio), j'ai des données en double. Un "SELECT DISTINCT" ne me résout pas le problème entièrement.

    Je souhaite, dans ma view, détecter les doublons et les supprimer tout en m'affichant mes données.

    Voilà la requête de ma vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT distinct company,
                    domain,
                    indicator,
                    detail_value AS site,
                    strftime("%Y-%m", datetime) AS month,
                    value
     FROM statistics
     WHERE dataset = 'is - sem - site summary' 
     AND instance IN ('Domain','domain')
    statistics est une autre vue qui comporte la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    select 
    	company.name as company, 
    	domain.name as domain, 
    	instance.name as instance, 
    	CASE 
    		WHEN instance.name like  "Site: %NAP id: 1" THEN 1
    		WHEN instance.name like  "Site: %NAP id: 2" THEN 2
    		ELSE NULL
    	END as NAP,
    	dataset.name as dataset, 
    	indicator.name as indicator, 
    	detail.name as detail_name,
    	detail.value as detail_value,
    	subdetail.name as subdetail_name,
    	subdetail.value as subdetail_value,
    	period.name as period,
    	datetime,
    	stat.value
    from 
    	dataset, 
    	stat
    	LEFT JOIN company on stat.company = company.id 
    	LEFT JOIN domain on stat.domain = domain.id
    	LEFT JOIN instance on stat.instance = instance.id
    	LEFT JOIN indicator on stat.indicator = indicator.id
    	LEFT JOIN detail on stat.detail = detail.id
    	LEFT JOIN subdetail on stat.subdetail = subdetail.id
    	LEFT JOIN period on stat.period = period.id
    where
    	stat.dataset = dataset.id
    Sachant qu'il s'agit d'une imbrication de vues , je ne sais pas comment m'y prendre. De plus, il s'agit de doublons absolus.

    Avez-vous une idée ?

    Merci d'avance pour l'aide que vous pourrez m'apporter !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Peut-on avoir un jeu de test, le résultat attendu et le résultat renvoyé par la requête ?
    Car un DISTINCT doit supprimer les lignes en double dans le résultat.

    Tatayo.

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Salut tatayo !

    Merci pour ta réponse. Qu'entends-tu par "un jeu de test" ?

    Pour ce qui est du reste :

    La première vue citée me renvoie :

    company company indicator site month value
    cust1 cust1 \n\n\n mon_site 2019-03 0.0
    cust1 cust1 value1 mon_site 2019-03 0.0
    cust1 cust1 value2 mon_site 2019-03 0.0
    cust1 cust1 value3 mon_site 2019-03 0.0
    cust1 cust1 value4 mon_site 2019-03 0.0
    cust1 cust1 value5 mon_site 2019-03 0.0
    cust1 cust1 value6 mon_site 2019-03 138.0
    cust1 cust1 value7 mon_site 2019-03 0.0
    cust1 cust1 value8 mon_site 2019-03 0.0
    cust1 cust1 value2 mon_site 2019-03 0,0
    cust1 cust1 value3 mon_site 2019-03 0,0
    cust1 cust1 value5 mon_site 2019-03 0,0
    cust1 cust1 value6 mon_site 2019-03 138,0
    cust1 cust1 value7 mon_site 2019-03 0,0
    cust1 cust1 value8 mon_site 2019-03 0,0

    Comme tu peux le constater, il y a 2 fois dans la colonne "indicator", value2 à value8.

    Je souhaite donc qu'il n'y ait qu'une fois ces lignes.

    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Pour supprimer le doublon, il doit s'agir d'un doublon. Or, dans la liste que tu as remise, il n'y a aucun doublon.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cust1 cust1 value2 mon_site 2019-03 0.0
    cust1 cust1 value2 mon_site 2019-03 0,0
    Le 1er enregistrement est terminé par 0.0 et le second par 0,0. En résumé, dans l'un, tu as le point décimal et dans l'autre, tu as une virgule. De ce fait, ils sont différents et le DISTINCT présent dans ta requête ou dans ta vue ne changera rien.
    Pour corriger, il faut commencer par rendre les lignes de données homogènes.
    Bon courage.

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour Seabs,

    Oh punaise ! Je l'ai tellement relu que j'avais même pas vu ça !

    Comment je peux "éliminer" ça du coup ?

    Merci pour ton aide

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je dirai qu'il faut faire du ménage dans les données.
    Quelque que chose me dit que la colonne en question est de type chaine, alors que visiblement il s'agit de données numériques.

    Tatayo.

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Tu veux dire "nettoyer les bases" ?

    En gros, je devrais :

    * Changer le séparateur
    * Supprimer les doublons
    * Afficher les résultats

    C'est à ça que tu penses ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Tu es sous SQLITE donc tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT distinct company,
                    domain,
                    indicator,
                    detail_value AS site,
                    strftime("%Y-%m", datetime) AS month,
                    replace(value, '.', ',') as value    // On peut aussi bien mettre replace(value, ',', '.') as value selon sa préférence
     FROM statistics
     WHERE dataset = 'is - sem - site summary' 
     AND instance IN ('Domain','domain')

    Citation Envoyé par tatayo Voir le message
    Je dirai qu'il faut faire du ménage dans les données.
    Quelque que chose me dit que la colonne en question est de type chaine, alors que visiblement il s'agit de données numériques.

    Tatayo.
    Tu devrais regarder ce qu'il y a dans la colonne value de la table stat il semble que les données n'aient pas la forme qui convient selon leur définition.

    Cordialement

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Non seulement, comme mentionné par Tatayo, la colonne "value" est très probablement d'un type caractère, mais en plus, "value" est un mot réservé SQL, double peine donc

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci à tous pour vos réponses.

    J'ai l'impression que la solution est enfin trouvée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAST( REPLACE( value , ',' , '.' ) as decimal ) as value
    Cela fonctionne et mon "SELECT DISTINCT" efface bien mes doublons.

    Qu'en pensez-vous ? Pas d'effets de bord indésirable à prévoir ?

    Merci encore

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Salut à tous !

    Pas de réponse alors je pars du principe qu'il n'y en aura pas.

    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PB: Insertion de doublon
    Par maxvador dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/09/2003, 12h07
  2. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  3. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29
  4. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo