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

SQL Oracle Discussion :

Données dans un seul champs


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Données dans un seul champs
    Bonjour,

    J'ai les données suivante dans une table :
    Nom : Capture.PNG
Affichages : 138
Taille : 1,7 Ko


    Je souhaiterai désormais avoir mes données dans un seul champs en gardant le même ID :

    ID CHAMPS V
    1 5W40
    1 10W40
    1 5W30
    1 10W50

    Est-il possible de faire celà en SQL

    Merci d'avance pour vos réponse

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Bonjour,

    En utilisant des UNION c'est possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT ID, V AS MyData FROM Matable
    UNION
    SELECT ID, V_1 AS MyData FROM MaTable
    UNION
    SELECT ID, V_2 AS MyData FROM MaTable
    UNION
    SELECT ID, V_3 AS MyData FROM MaTable

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup pour votre réponse

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    La solution classique à ce type de problème passe par la multiplication des enregistrements via un produit cartésien avec une table pivot puis le filtrage des colonnes en fonction du numéro d'ordre de la table pivot.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    With Data As (
      Select  1 as id, '5W40' V, '10W40' v_1, '5W30' v_2, '10W50' v_3 from dual
    )
    Select id,
           Case pivot.x 
             When 1 Then V 
             When 2 Then V_1
             When 3 Then V_2
             When 4 Then V_3
           End champ_v
      From data
           Cross join
           (Select level x from dual connect by level <= 4) pivot
    Puis à partir d'Oracle 11 cela a été simplifié via les instructions PIVOT/UNPIVOT

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Meric mnitu pour ta réponse.

    J'ai essayé une autre requête, qui est la suivante (au cas où ça pourrais servir à qqln) :

    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
    with t as (
    select '1' as ID, '5W40;10W40;10W50;5W30' as NORMES from DUAL
    )
    select t.ID, x.column_value as NORMES
      from t
     cross join table(
                  cast(multiset(
                           select substr( ';'||NORMES||';',
                                          instr( ';'||NORMES||';', ';', 1, rownum )+1,
                                          instr( ';'||NORMES||';', ';', 1, rownum+1 )
                                                 -instr( ';'||NORMES||';', ';', 1, rownum )-1
                                         )
                             from dual
                          connect by level <= length(NORMES)-length(replace(NORMES,';',''))+1
                                ) as sys.odcivarchar2list )
                        ) x
     
    ORDER BY NORMES;

    Désormais je souhaiterai mettre a jour une colonne qui s'appelle NORMESqui vient d'une table HUILE avec cette requête, cependant je ne sais pas du tout ou placer mon update dans cette requête.
    Enfin je ne sais pas si j'étais clair..

  6. #6
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Bonsoir,
    tu ne peux faire un update puisque tu produiras plus de ligne qu'il n'y en a actuellement dans ta table... Tu peux insérer des nouvelles lignes et supprimer les originales...
    Mais je dirais que le plus simple est de créer une table huile2, à partir de la ta table huile (puis si nécessaire de dropper l'ancienne table pour la remplacer par la nouvelle; attention a reverifier les contraintes au passage...) :

    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
     
          Create table HUILE2 
                  Tablespace xxx
               as 
            select t.ID, x.column_value as NORMES
      from HUILE t
     cross join table(
                  cast(multiset(
                           select substr( ';'||NORMES||';',
                                          instr( ';'||NORMES||';', ';', 1, rownum )+1,
                                          instr( ';'||NORMES||';', ';', 1, rownum+1 )
                                                 -instr( ';'||NORMES||';', ';', 1, rownum )-1
                                         )
                             from dual
                          connect by level <= length(NORMES)-length(replace(NORMES,';',''))+1
                                ) as sys.odcivarchar2list )
                        ) x
     ORDER BY NORMES;
     
        -- ensuite si necessaire :
        DROP TABLE HUILE;
        ALTER TABLE HUILE2 rename to HUILE;

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

Discussions similaires

  1. Plusieurs champs dans 1 seul champ
    Par lionel256 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 07/04/2008, 10h44
  2. Réponses: 4
    Dernier message: 10/03/2008, 16h12
  3. Réponses: 1
    Dernier message: 06/03/2008, 20h40
  4. sélection multiple de valeurs dans un seul champ
    Par antoine0207 dans le forum Access
    Réponses: 4
    Dernier message: 04/07/2006, 17h01
  5. enregistrer deux variable différente dans un seul champs
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 7
    Dernier message: 07/03/2004, 23h18

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