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

MS SQL Server Discussion :

Creation d'une table par étapes


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut Creation d'une table par étapes
    Bonjour

    je souhaite créer une table à partir de plusieurs requêtes SQL


    Supposons que ma table finale doit contenir 9 colonnes (Col1, Col2, ..., Col9)
    Et que je dispose de 3 requêtes (trés complexes entre parenthèses)
    Requete1 --> Col1 ,Col2, Col3
    Requete2 --> Col4 ,Col5, Col6
    Requete3 --> Col7 ,Col8, Col9
    et que si je dispose les 9 colonnes dans l'ordre, j'obtiens mon résultat souhaité.

    Toutes mes requêtes générent le même nombre de lignes car j'utilise toujours un left join avec une même table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select ...
    from A 
    left join B ON ..
    left join C ON ..
    Ya t il un moyen de créer la table de cette maniére ? (le insert into champ par champ ne marche évidemment pas )
    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 862
    Points : 53 013
    Points
    53 013
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    INTO MaNouvelleTable
    FROM ...
    A +

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Merci de lire le post avant de répondre..

    select into manouvelletable from .. (Requete1)

    Le problème c'est ce qui se passe pour Requete2 et Requete3

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Bonjour,

    Si ta requête de sélection renvoie la liste de tes 9 champs à suivre tu peux utiliser la syntaxe INSERT.... SELECT de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO MaTable (ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9)
    SELECT ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9
    FROM A 
    LEFT JOIN B ON ..
    LEFT JOIN C ON ..
    Je ne sais pas si cette syntaxe correspond à ta recherche.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    Non, ce que SQLPro a voulu dire c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Col1, Col2, ..., Col9
    INTO MaNouvelleTable
    FROM A 
    LEFT JOIN B ON ..
    LEFT JOIN C ON ..
    Ce code fonctionne parfaitement bien.

    Pourriez-vous nous donner l'erreur ou le résultat remonté svp ?

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Je n'ai pas trois tables A, B et C
    et je ne veux pas passer par des tables intermédiaires..

    J'ai 3 requetes, chacune générant 3 colonnes.
    L union des 3 colonnes col1, col2, .... col9 correspond a ma table

    je peux effectivement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO MaTable (ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9)
    SELECT ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9
    FROM (.. Requete1 .. ) A 
    LEFT JOIN ( .. Requete2 ..) B ON ..
    LEFT JOIN ON (.. Requete3 .. )  C ON ..

    Le fait est que chaue requete nécessite beaucoup de temps et que je ne m'en sortirai jamais si je fais ça.

    je cherche donc un moyen d'alimenter la table colonne par colonne..

    Merci

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Votre première requête peut être un
    SELECT mesColonnes
    INTO maNouvelleTable
    FROM maTable.

    Vos requêtes suivantes devront être du type :

    INSERT INTO maNouvelleTable (maListeDeColonnes)
    SELECT maListeDeColonnesCorrespondantes

    Et soyez un peu plus aimable, on essaie de vous aider

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    D'abord, plus aimable que moi tu meurs

    Passons..

    SELECT mesColonnes
    INTO maNouvelleTable
    FROM maTable.

    ce code va créer la table selon le shema de "mesColonnes"..

    INSERT INTO maNouvelleTable (maListeDeColonnes)
    SELECT maListeDeColonnesCorrespondantes

    va générer une erreur de syntaxe car le shema ne correspond pas.

    Mais je te suis..

    Supposons que je fais un
    Alter table maNouvelleTable Add (maListeDeColonnesCorrespondantes)

    Le Insert into maNouvelleTable(maListeDeColonnesCorrespondantes)
    select maListeDeColonnesCorrespondantes

    va ajouter les lignes à maNouvelletable de telle façon que j'ai 2 fois le nombre de lignes souhaités avec Null dans les colonnes qui ne sont pas dans la liste de chaque select.

    Je ne crois pas que je me suis mal expliqué sur ce coup là.
    Je sais que vous essayer de m'aider. Je suis bien placé pour le savoir, et merci. Mais le fait de lire le post en diagonale et répondre va faire en sorte que personne ne va comprendre la suite.. et c'est ce qui s'est passé.

    Je reformule:

    J'ai une requete qui génére par ex:

    Nom Prénom (select nom, prenom from A)

    et une autre table qui génére age, adresse (select age, adresse from B right join A on ...)
    --> le right join va assurer un meme nombre de lignes

    Le résultat souhaité est Nom Prénom Age Adresse avec meme nombre de lignes que dans A

    Ce que tu me propose elsuket va générer des enregistrements de la forme :
    Nom-------Prenom Age Adresse
    Dupont----John----Null--Null
    Null-------Null-----20---Paris

  9. #9
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Je crois avoir compris ce que tu veux. Si c'est la cas:

    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
    SELECT maColonne1, maColonne2, maColonne3
    INTO maNouvelleTable
    FROM maTable
    GO
     
    UPDATE maNouvelleTable
    SET maColonne4 = ...,
    	maColonne5 = ...,
    	maColonne6 = ...
    FROM maNouvelleTable
    INNER JOIN monAutreTable ON maNouvelleTable.ID = monAutreTable.ID
    GO
     
    UPDATE maNouvelleTable
    SET maColonne7 = ...,
    	maColonne8 = ...,
    	maColonne9 = ...
    FROM maNouvelleTable
    INNER JOIN monAutreTable2 ON maNouvelleTable.ID = monAutreTable2.ID
    GO
     
    ...
    Notes que tu n'es pas obligé d'utiliser INNER JOIN, tu peux tout aussi bien mettre LEFT JOIN OU RIGHT JOIN.

    Est-ce que c'est ça que tu cherchais ?

  10. #10
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Bon

    J'ai beau cherché.. il y a pas moyen simple de le faire.

    Je suis donc passé par des tables intermédiaires, et g utilisé des join aprés ça.


    Merci pour vos interventions

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  2. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  3. creation d'une fonction par l'utilisateur
    Par michelk dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/03/2005, 09h53
  4. Réponses: 6
    Dernier message: 28/12/2004, 16h09
  5. Réponses: 2
    Dernier message: 02/11/2004, 12h38

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