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

Langage SQL Discussion :

Update avec set = 'Segmentation de deux colonnes' | Erreur SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 17
    Par défaut Update avec set = 'Segmentation de deux colonnes' | Erreur SQL
    Bonjour,

    Je voudrais passer de ceci :
    Nom : résultat initial.PNG
Affichages : 144
Taille : 3,2 Ko

    à cela :
    Nom : resultat final.PNG
Affichages : 136
Taille : 2,9 Ko

    Lorsque le SNOMJOB est > 6 caractères -> on y met que les 3 premiers caractères dans Trigramme
    Lorsque le SNOMJOB est <= 6 caractères -> on y met que les 2 premiers caractères dans Trigramme


    Pour le moment j'ai :


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUBSTR(SNOMJOB,1,3) FROM TBL_FRONT_BBP WHERE LENGTH(SNOMJOB) > 6 
    SELECT SUBSTR(SNOMJOB,1,2) FROM TBL_FRONT_BBP WHERE LENGTH(SNOMJOB) <= 6

    et j'ai bien une liste avec les 3 ou 2 premiers chars en fonction de la taille
    sauf qu'il faut que j'insère sa dans la colonne TRIGRAMME

    Pour modifier mes données je sais qu'il me faudra faire un Update, donc je m'y suis mis aussitôt :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TBL_FRONT_BBP set SNOMJOB=(SELECT SUBSTR(SNOMJOB,1,3) FROM TBL_FRONT_BBP WHERE LENGTH(SNOMJOB) > 6)


    Mais j'obtient une erreur :
    Erreur SQL : ORA-01427: sous-requête ramenant un enregistrement de plus d'une ligne
    01427. 00000 - "single-row subquery returns more than one row"
    Je pense que pour remédier au problème il me faudrait faire une boucle, parcourir lignes par lignes la colonne :

    boucle qui parcourt lignes par lignes (getline)
    si (taille job <= 6)
    alors on sectionne les 2 premiers caractères avec substr et on le met dans colonne TRIGRAMME
    si condition est vraie on change de ligne
    sinon
    alors on sectionne les 3 premiers caractères avec substr et on le met dans colonne TRIGRAMME
    si condition est vraie on change de ligne
    fin de la boucle

    voilà, je compte sur votre aide
    à vrai dire je débute en SQL et j'aimerai vraiment progresser sur ce langage

    Merci

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Passez plutôt par un CASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE TBL_FRONT_BBP 
        set SNOMJOB= 
        CASE 
            WHEN LENGTH(SNOMJOB) > 6 THEN SUBSTR(SNOMJOB,1,3) 
            ELSE SUBSTR(SNOMJOB,1,2) 
        END

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 17
    Par défaut Super !
    Super merci !

    je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TBL_FRONT_BBP 
        SET TRIGRAMME= 
        CASE 
            WHEN LENGTH(SNOMJOB) > 6 THEN SUBSTR(SNOMJOB,1,3) 
            ELSE SUBSTR(SNOMJOB,1,2) 
        END
    Le résultat et bel est bien celui attendu, merci beaucoup pour l'aide !

    J'étais parti pour faire du PL/SQL..

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

Discussions similaires

  1. [11g] Update avec la valeur de la colonne précédente
    Par Kisty10 dans le forum SQL
    Réponses: 7
    Dernier message: 11/08/2017, 14h59
  2. Requête avec comparaison dates sur deux colonnes
    Par DAVJO dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2015, 10h22
  3. [AC-2010] Créer ComboBox avec l'union de deux colonnes
    Par Gautch dans le forum IHM
    Réponses: 9
    Dernier message: 28/03/2014, 11h30
  4. [SQL] Update avec un count sur une colonne de la meme table
    Par debdev dans le forum SAS Base
    Réponses: 5
    Dernier message: 28/01/2014, 16h46
  5. Réponses: 3
    Dernier message: 13/01/2012, 11h58

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