1. #1
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2014
    Messages : 6
    Points : 3
    Points
    3

    Par défaut Remplacement de valeurs multiples en SQLITE (C#)

    Bonjour à tous,
    Je vous explique mon problème mais avant tout je tiens à vous dire que je n’y connais pas grand chose en SQL et plus précisément en SQLITE !
    J’ai créé une base SQLITE avec une table que j’ai alimentée avec 211 000 lignes. Pour expliquer mon problème je vais prendre un échantillon de cette table (40 enregistrements).
    Je cherche à faire une requête SQL pour affecter la valeur prix de 2017 à la ligne correspondante de 2018.

    Exemple : le prix de la ligne 2 devrait passer à 4,01.

    Merci pour votre aide si vous avez une idée ?

    Garantie Dept Type Annee Prix

    GTSO10 DEPT 04 ADULTE 2017 4,01
    GTSO10 DEPT 04 ADULTE 2018 0
    GTSO10 DEPT 04 ENFANT 2017 3,09
    GTSO10 DEPT 04 ENFANT 2018 0
    GTSO10 DEPT 05 ADULTE 2017 2,8
    GTSO10 DEPT 05 ADULTE 2018 0
    GTSO10 DEPT 05 ENFANT 2017 2,8
    GTSO10 DEPT 05 ENFANT 2018 0
    GTSO10 DEPT 06 ADULTE 2017 3,13
    GTSO10 DEPT 06 ADULTE 2018 0
    GTSO10 DEPT 06 ENFANT 2017 3,13
    GTSO10 DEPT 06 ENFANT 2018 0
    GTSO10 DEPT 13 ADULTE 2017 3,05
    GTSO10 DEPT 13 ADULTE 2018 0
    GTSO10 DEPT 13 ENFANT 2017 3,05
    GTSO10 DEPT 13 ENFANT 2018 0
    GTSO10 DEPT 20 ADULTE 2017 2,64
    GTSO10 DEPT 20 ADULTE 2018 0
    GTSO10 DEPT 20 ENFANT 2017 2,64
    GTSO10 DEPT 20 ENFANT 2018 0
    GTSO10 DEPT 30 ADULTE 2017 2,81
    GTSO10 DEPT 30 ADULTE 2018 0
    GTSO10 DEPT 30 ENFANT 2017 2,81
    GTSO10 DEPT 30 ENFANT 2018 0
    GTSO10 DEPT 34 ADULTE 2017 2,81
    GTSO10 DEPT 34 ADULTE 2018 0
    GTSO10 DEPT 34 ENFANT 2017 2,81
    GTSO10 DEPT 34 ENFANT 2018 0
    GTSO10 DEPT 83 ADULTE 2017 2,79
    GTSO10 DEPT 83 ADULTE 2018 0
    GTSO10 DEPT 83 ENFANT 2017 2,79
    GTSO10 DEPT 83 ENFANT 2018 0
    GTSO10 DEPT 84 ADULTE 2017 2,71
    GTSO10 DEPT 84 ADULTE 2018 0
    GTSO10 DEPT 84 ENFANT 2017 2,71
    GTSO10 DEPT 84 ENFANT 2018 0
    GTSO10 DEPT 99 ADULTE 2017 2,92
    GTSO10 DEPT 99 ADULTE 2018 0
    GTSO10 DEPT 99 ENFANT 2017 2,92
    GTSO10 DEPT 99 ENFANT 2018 0

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 402
    Points : 22 429
    Points
    22 429

    Par défaut

    En SQL standard, ça s’écrirait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update  matable tgt
    set Prix  = 
        (   select  src.Prix
            from    matable src
            where   src.Garantie  = tgt.Garantie
                and src.Dept      = tgt.Dept
                and src.Type      = tgt.Type
                and src.Annee     = 2017
        )
    where   tgt.Prix    = 0
        and tgt.Annee   = 2018
    Il y a de très fortes chances que ça fonctionne avec SQLite.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2014
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Merci, Je vais faire un test immédiatement...

  4. #4
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2014
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    J'ai traduit en SQLITE mais à quoi correspond TGT et SRC car j'ai une erreur si je les laisse ?

    Le resultat de la requete sans est :

    Requête exécutée avec succès : update LigneProduitIndiv
    set valeur_bareme =
    ( select valeur_bareme
    from LigneProduitIndiv
    where code_garantie_technique = code_garantie_technique
    and code_valeur_de_critere_1 = code_valeur_de_critere_1
    and code_valeur_de_critere_2 = code_valeur_de_critere_2
    and code_valeur_de_critere_3 = "2017 "
    )
    where valeur_bareme = 0
    and code_valeur_de_critere_3 = "2018 " (en 60 ms, 0 enregistrements affectés)
    Mais 0 enregistrement modifié !

    LigneProduitIndiv = table
    valeur_bareme = prix
    code_garantie_technique = garantie
    code_valeur_de_critere_1 = departement
    code_valeur_de_critere_2 =
    code_valeur_de_critere_3 = année

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update  LigneProduitIndiv 
    set valeur_bareme  = 
        (   select  valeur_bareme
            from    LigneProduitIndiv 
            where   code_garantie_technique       = code_garantie_technique
                and code_valeur_de_critere_1      = code_valeur_de_critere_1
                and code_valeur_de_critere_2      = code_valeur_de_critere_2
                and code_valeur_de_critere_3      = "2017      "
        )
    where   valeur_bareme    = 0
        and code_valeur_de_critere_3   = "2018      "

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2014
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Bon avec le code SQLITE suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update  LigneProduitIndiv 
    set valeur_bareme  = 
        (   select  valeur_bareme
            from    LigneProduitIndiv src
            where   code_garantie_technique = code_garantie_technique
            and code_valeur_de_critere_1 = code_valeur_de_critere_1
            and code_valeur_de_critere_2 = code_valeur_de_critere_2
            and code_valeur_de_critere_3 = "2017      "
        )
    where   valeur_bareme = 0
        and code_valeur_de_critere_3 = "2018      "

    j'ai le résultat suivant mais toutes les lignes "2018" ont la même valeur pour le prix ????:

    Requête exécutée avec succès : update LigneProduitIndiv
    set valeur_bareme =
    ( select valeur_bareme
    from LigneProduitIndiv src
    where code_garantie_technique = code_garantie_technique
    and code_valeur_de_critere_1 = code_valeur_de_critere_1
    and code_valeur_de_critere_2 = code_valeur_de_critere_2
    and code_valeur_de_critere_3 = "2017 "
    )
    where valeur_bareme = 0
    and code_valeur_de_critere_3 = "2018 " (en 106 ms, 240 enregistrements affectés)

  6. #6
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2014
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Bon merci pour les réponses, il semble que TGT ne soit pas possible en SQLITE.

    Je vais donc utiliser des boucles en C# avec la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    update LigneProduitIndiv 
    set valeur_bareme = 
    (select valeur_bareme
     from LigneProduitIndiv
     where code_garantie_technique = "GTSO10    "
     and  code_valeur_de_critere_3 = "2017      "
     and code_valeur_de_critere_1 = "DEPT 04   "
     and code_valeur_de_critere_2 = "ADULTE    "
     )
     where (code_garantie_technique = "GTSO10    "
     and  code_valeur_de_critere_3 = "2018      "
     and code_valeur_de_critere_1 = "DEPT 04   "
     and code_valeur_de_critere_2 = "ADULTE    ")

    En faisant varier Le code_garantie_technique (10 valeurs possibles), le code_valeur_de_critere_1(8 valeurs possibles) et le code_valeur_de_critere_2(2 valeurs possibles) je vais couvrir le besoin.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 366
    Points : 19 388
    Points
    19 388
    Billets dans le blog
    4

    Par défaut

    Bonjour,

    tgt et src sont des alias si al1_24 les a nommés ainsi c'est pour "target" et "source" mais il aurait aussi bien pu mettre a,b ou tout autres noms.

    SQLite ne permet pas de nom d'alias dans Update (hélas) mais ce qui suit devrait fonctionner (en tout cas ce serait mieux que des boucles dans un programme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    update LigneProduitIndiv 
    set valeur_bareme =
    ( select valeur_bareme
    from LigneProduitIndiv src
    where src.code_garantie_technique =  LigneProduitIndiv.code_garantie_technique
    and src.code_valeur_de_critere_1 =  LigneProduitIndiv.code_valeur_de_critere_1
    and src.code_valeur_de_critere_2 =  LigneProduitIndiv.code_valeur_de_critere_2
    and src.code_valeur_de_critere_3 = "2017 "
    )
    where valeur_bareme = 0
    and code_valeur_de_critere_3 = "2018 "
    en post scriptum, je suis plus qu'étonné qu'une année soit une chaine de 5 caractères mais bon, on est pas dans ce post pour parler de la structure de la table
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  8. #8
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2014
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Un grand merci à vous tous ça fonctionne à merveille. Pour ce qui est des années en chaine de caractères c'est l'éditeur de l'ERP qui est à l'origine.
    Vraiment vous êtes tous super.
    Merci encore

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

Discussions similaires

  1. [AC-2007] Remplacement de valeurs dans une liste à choix multiples
    Par Cinesra dans le forum Modélisation
    Réponses: 1
    Dernier message: 21/07/2011, 15h47
  2. [XML] Comment remplacer la valeur de la balise ?
    Par laclac dans le forum Langage
    Réponses: 4
    Dernier message: 19/08/2005, 15h10
  3. CR9 - Récupérer valeurs multiples d'un champ paramètre
    Par CR9-Deb dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/07/2005, 16h08
  4. [CR8] Champs de paramètres à valeurs multiples
    Par Nout dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/02/2005, 16h51
  5. requete select avec AS remplacement de valeur
    Par pi3141563 dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/04/2004, 22h15

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