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 :

Multiplier les données d'une table x fois [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut Multiplier les données d'une table x fois
    Bonjour,

    J'ai une table droits qui contient une colonne id et une colonne type_droit.

    J'ai une autre table employés qui contient plusieurs colonnes dont une colonne droit.

    Je voudrais pouvoir multiplier les données de la table employés à partir d'une requête select * from employés where col1 = 'A'
    autant de fois qu'il y a de type_droit dans la table droits et mettre à jour la colonne droit de la table employés qui va contenir la valeur
    du type_droit après chaque itération.

    Si la requête select * from employés where col1 = 'A' me retourne 10 lignes et que la table droits contient 5 types.

    Je devrais insérer dans la table employés 10 * 5 soit 50 lignes.

    Pour les 10 premières lignes on aura par exemple dans la colonne droit la première valeur type_droit qui existe dans la table droits et ainsi de suite.

    Merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Il suffit de faire un produit cartésien entre les deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select  emp.*
        ,   drt.*
    from    employés    as emp
        cross join
            droits      as drt
    where   emp.col1 = 'A'
    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
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Merci.

    Je fais donc l'insert de la requête c'est bien cela?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Quelles autres informations as-tu dans la table Employés ?
    Il semblerait qu'il y a un problème de modélisation de ta base de données.

    Si un employé peut avoir plusieurs droits, il ne faut pas que le colonne Droit se trouve dans la table Employé mais dans une table d'association qui lie les tables Employé et Droit.
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Je ne suis pas dans un cas où il y a une relation entre les deux tables ni dans un cas où il faut penser logique. :-)

    Ce que je voudrais c'est simplement récupérer la valeur du type et l'insérer dans la colonne droit de la table employés.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Est ce que quelque chose comme ceci peut fonctionner ?

    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
    DECLARE @typed VARCHAR(50);
     
    DECLARE Cur1 CURSOR FOR
        SELECT typed FROM droits;
     
    OPEN Cur1
    FETCH NEXT FROM Cur1 INTO @typed;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    	IF OBJECT_ID('employes_tmp', 'U') IS NOT NULL
    	DROP TABLE employes_tmp;
     
    	select * into employes_tmp from employes where col1 = 'A' ;
     
    	update employes_tmp
    	set droit = @typed;
     
    	insert into employes
    	select * from employes_tmp;
     
    	delete from employes_tmp;
    END;
    CLOSE Cur1;
    DEALLOCATE Cur1;
    Merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Argh ! le curseur, les select * , la table inutile créée / supprimée à la volé, le update sans la clause where...
    Tu as zappé tous tes cours de SQL ?
    https://sql.developpez.com/

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    il faudrait peut être rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and droit not in (select typed FROM droits);
    au niveau de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * into employes_tmp

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Argh ! le curseur, les select * , la table inutile créée / supprimée à la volé, le update sans la clause where...
    Tu as zappé tous tes cours de SQL ?
    pas besoin de la clause where dans le update je veux mettre la même valeur pour toutes les lignes de la table temporaire.

    Sûrement que j'ai raté mes cours de SQL d'où ma présence dans ce forum :-)

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    L'expression de besoin n'est pas claire.
    Il faut communiquer la description exacte des tables (idéalement le DDL CREATE TABLE) un exemple de jeu de données en entrée (un extrait suffit) et un exemple de résultat attendu en sortie.

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Je me suis vraiment mélangé dans mes idées.

    J'étais sur différentes tâches de développement en parallèle ce qui fait que je n'ai pas pensé en terme de logique SQL.

    La solution est celle que m'a proposée al1_24

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select  emp.*
        ,   drt.*
    from    employés    as emp
        cross join
            droits      as drt
    where   emp.col1 = 'A'
    Merci à tous.

    Est il possible de supprimer mes commentaires car j'ai honte de ce que j'ai pu proposer comme solutions ?

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Y a t-il un moyen en langage SQL de faire un select * (sans spécifier les noms des colonnes) de la table employés et dans ce même select remplacer la colonne d'une table par une colonne d'une autre table à savoir la colonne droit de la table employés par la colonne type_droit de la table droits.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jinkas99 Voir le message
    Y a t-il un moyen en langage SQL de faire un select * (sans spécifier les noms des colonnes) de la table employés et dans ce même select remplacer la colonne d'une table par une colonne d'une autre table à savoir la colonne droit de la table employés par la colonne type_droit de la table droits.
    Sérieusement, comment veux-tu qu'un ordinateur devine les colonnes à substituer sans lui préciser ?

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Peut être que je me suis mal exprimé.

    Il ne va pas deviner. J'ai bien précisé dans mon commentaire qu'il s'agit d'afficher la colonne type_droit au lieu de la colonne droit.

    Donc, faire une sorte de select emp.* sans la colonne droit et à la place la colonne drt.type_droit.

    C'est juste une question. Je ne suis pas convaincu que c'est faisable mais on ne s'est jamais avec les experts qu'on trouve dans ce forum.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Et tu veux aussi que ça remplace tout seul la colonne IlVoteÀGauche par IlPorteÀGauche ?

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Peut être qu'avec tes étoiles magiques ça peut se faire.

    Merci en tout cas à chacun d'entre vous pour avoir essayé de m'aider et de supporter certaines de mes questions débiles.:-)

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

Discussions similaires

  1. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  2. Réponses: 13
    Dernier message: 14/09/2005, 16h21
  3. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51
  4. MySQL Administrator : modifier les données d'une table
    Par Robinounou dans le forum Outils
    Réponses: 4
    Dernier message: 13/07/2005, 17h21
  5. transformer les données d'une table .dbf vers ma BD
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 09h54

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