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 :

Random dans une colonne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut Random dans une colonne
    BOnjour

    Voici mon problème.

    Je construis un jeux de test en prenant des champs de 2 tables.
    Cependant pour une colonne (col3) dans mon exemple si dessous je veux insérer une valeur aléatoire en faisant un random entre 0 et 6 puis faire un case when pour décider quoi afficher.
    J'ai pensé faire un dbms_random.value(0,6) suivi d'un case when mais cela semble ne pas marcher.
    Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select 
    t1.col1,
    t2.col2,
    col3
    t1col4,
    from tablte1 t1 , table2 t2

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut
    J'ai trouvé une solution qui est la suivante:
    Avez vous une solution plus rapide ?

    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 
    tmp1.col1,
    tmp1.col2,
    (case when tmp2.R1  = 1 then 'toto'
          when tmp2.R1 = 2 then 'titi'
          when tmp2.R1  = 3 then 'tutu'
          when tmp2.R1 = 4 then 'bobo'
          when tmp2.R1 = 5 then 'bibi'
          when tmp2.R1 = 6 then 'bubu'
          else 'blabla' end),
    tmp1.col4
    FROM
      (
      select 
        rownum as NUM, 
       t1.col1 as col1, 
       t2.col2 as col2,
       t1.col4 as col4
      from t1,t2
      ) tmp1
    inner join 
      (
      select 
        rownum as NUM, 
        trunc(dbms_random.value(1,6),0) as R1 
      from dual
      connect by rownum  <= 50 --ici mettre le nombre de ligne que l on a en restitution par exemple ici 50
      ) tmp2
    ON tmp1.NUM = t2.NUM

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bien compliqué cette requête juste pour faire du case sur un random.
    Il faut juste faire un seul appel à dbms_random par ligne afin de pouvoir en tester la valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT t1.col1, t2.col2,
    (CASE WHEN w.R1  = 1 THEN 'toto'
          WHEN w.R1 = 2 THEN 'titi'
          WHEN w.R1  = 3 THEN 'tutu'
          WHEN w.R1 = 4 THEN 'bobo'
          WHEN w.R1 = 5 THEN 'bibi'
          WHEN w.R1 = 6 THEN 'bubu'
          ELSE 'blabla' END),
    		t1.col4
    FROM t1, t2, (SELECT TRUNC(dbms_random.value(1,6)) r1 FROM dual) w
    WHERE rownum < 50

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec le random sur la plage 1-6, vous n'allez pas avoir beaucoup de 6.
    Faites comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select t1.col1
         , t2.col2
         , case floor(dbms_random.value(1, 7 - 1e-10))
             when 1 then 'toto'
             when 2 then 'titi'
             when 3 then 'tutu'
             when 4 then 'bobo'
             when 5 then 'bibi'
             when 6 then 'bubu'
             else 'blabla'
           end
         , t1.col4
      from t1, t2
     where rownum < 50;

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    A chaque fois j'oublie cette fonctionnalité du case de mettre le test avant les WHEN

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Cette écriture fonctionne exactement comme le DECODE, au test du null près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select case null when null then 1 else 0 end as tst1
         , decode(null, null, 1, 0)              as tst2
      from dual;
     
          TST1       TST2
    ---------- ----------
             0          1

Discussions similaires

  1. VBA : mettre une formule dans toute une colonne de la ligne Z2 à Z30
    Par Alain777 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/05/2015, 21h54
  2. Ajouter 'TER222' devant un nombre dans toute une colonne
    Par TheTcha dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 08/01/2013, 12h50
  3. Une colonne en plus dans ma ListView...
    Par James_ dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/09/2003, 23h30
  4. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12
  5. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44

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