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

Développement SQL Server Discussion :

[R]Mettre à jour une colonne en fonction de plusieurs lignes d'une autre table avec un LIKE et une boucle


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut [R]Mettre à jour une colonne en fonction de plusieurs lignes d'une autre table avec un LIKE et une boucle
    Bonjour à tous,

    J'aurais besoin d'aide pour construire une requête :
    J'ai deux tables :
    des ventes (avec des EAN) par région. Seule trois colonnes sont impliquées dans ce dont j'ai besoin : l'EAN et le code région et une colonne exclure, que je dois remplir
    des Exclusion, avec deux colonnes, un code région et le début, à taille variable, d'EAN (de 1 à 7 caractères)
    Je dois pouvoir marquer, dans la colonne exclure de ma table de vente les EAN qui commence, pour une région données, par les codes indiquée dans la table Exclusion.
    Exemple :
    Dans la table exclusion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    REGION	EXCLUSION
    21	3
    21	27
    21	0000
    95	234
    95	01
    13	0000000
    13	34
    13	2300
    Dans la table vente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    EAN		REGION	EXCLUSION
    2700987464765	21	1
    3400986534362	21	
    0000054363834	13	
    2786543254739	34
    Seul le premier EAN doit être marqué à 1, car c'est le seul qui répond aux conditions de la table Exclusion (pays et premiers caractères de l'EAN).

    Je souhaiterais dont mettre Exclusion à 1 pour toutes les lignes qui correspondent au code région, mais aussi dont l'EAN commence par une des lignes correspondantes de la table exclusion.

    Je pense que le faire directement en SQL sera beaucoup plus rapide que le script que j'ai déjà. Le problème, c'est que j'ai 50 millions de lignes dans ma table de vente (seulement une centaine dans ma table exclusion), et que le script mais des plombes à faire ce qui doit être fait !

    Merci pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    REGION	EXCLUSION
    21	2
    21	27
    


    Ce qui commence par 27 commence aussi par 2, donc il y a redondance des règles
    et
    2300986534362 21 commence par 2 alors pourquoi n'est-il pas exclus par votre règle ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Bonjour,
    Merci pour votre réponse.
    Effectivement, mon exemple n'est pas juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REGION	EXCLUSION
    21	3
    21	27
    Il n'y a pas ce type de redondance, j'ai donc modifié le premier 2 par un 3 (et reformaté pour que cela soit plus lisible !)

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    merge into ventes v
    using (select * from exclusions) e 
    on e.region = v.region AND substring(v.ean,1, len(e.exclusion)) = e.exclusion
    when matched 
    update set exclusion = 1
    when not matched
    update set exclusion = 0 -- ou NULL ou ...
    ;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    C'est top, merci beaucoup JeitEmgie,
    Il m'indique que when not matched ne peut pas être suivi d'un UPDATE.
    Pas un pb, je le fait ensuite par une autre requête de mise à jour ensuite en mettant à 0 tout ceux qui ne sont pas à 1.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par fdecourt Voir le message
    C'est top, merci beaucoup JeitEmgie,
    Il m'indique que when not matched ne peut pas être suivi d'un UPDATE.
    Pas un pb, je le fait ensuite par une autre requête de mise à jour ensuite en mettant à 0 tout ceux qui ne sont pas à 1.
    Si vous devez exécuter ce processus à intervalles réguliers avec des règles qui changent, mieux vaut faire la mise à zéro de tout avant.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2020, 14h30
  2. Une seule colonne en fonction de plusieurs lignes
    Par imanebelkkkk dans le forum Développement
    Réponses: 10
    Dernier message: 20/05/2019, 08h20
  3. Réponses: 3
    Dernier message: 04/11/2010, 13h03
  4. Mettre à jour une attache table
    Par PtitGénie dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/01/2009, 15h55

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