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 :

Insert into avec condition


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut Insert into avec condition
    Bonjour,

    Je dois créer une table avec les variables value1, value2, value3 qui sont stockés dans une autre table mais dans cet autre table il y a une variable value et une autre type.
    value1 correspond à value quand type=1, etc..

    Auriez-vous une idée de comment faire ?

    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

    pouvez vous fournir un jeu d'essai et résultat attendu afin de mieux comprendre ce que vous voulez faire

    Merci

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Par exemple ma première table est constitué de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    value type
    12      2
    20      3
    78      1
    96      2
    45      3
    Et dans ma nouvelle table que j'ai créé je voudrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    value1 value2 value3 
    78      12      20
            96      45

  4. #4
    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 : 44
    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
    Par défaut
    Bonjour,

    A mon avis, votre "table" d'arrivée est un résultat purement esthétique, qui va à l'encontre de SQL, et qui devrait dont être produit par une application.

    Lorsque vous aurez un autre type, vous allez ajouter encore une colonne ...

    @++

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Non car il existe plusieurs types mais les seuls qui m'intéressent sont ceux qui ont comme valeur 1, 2 et 3.

    De plus dans ma table créée j'ai beaucoup d'autres variables, que je n'ai pas cité car elles ne concernent pas mon problème, et si je souhaiterai faire cela c'est pour ne pas rajouter une clé primaire à ma table qui en contient déjà beaucoup donc ma "table" créée n'est pas un résultat purement esthétique.

  6. #6
    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
    En plus de ce qu'a dit - à juste titre - ElSuket, dans votre jeu d'essai, qu'est qui permet de dire que le résultat attendu n'est pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    value1 value2 value3 
    78      96      45
            12      20
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    value1 value2 value3 
            96      20
    78     12      45
    ou toute autre combinaison ?
    dans votre table d'origine vous n'avez pas de notion d'ordre relatif des valeurs...

  7. #7
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    J'ai la même impression qu'elsuket : ça ressemble tellement fort à de la cosmétique que je dirai bien que ça en est...

    (cf http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9)
    Le SQL n'est pas fait pour la présentation des données.

    Cordialement,

    Arkhena

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Dans l'exemple que j'ai donnée je n'ai pas mis toutes les variables des deux tables. Dans la première table il n'y a pas que les variables "value" et "type" mais il y en a d'autre qui me permettent de rattacher ces données à d'autre tables.

    Je vais essayer d'être plus précise. A l'origine j'ai une multitude de base de données avec une multitude de tables avec des informations plus ou moins importantes. Dans chaque BD, il existe les mêmes tables (par exemple, dans chaque BD il y a la table 'property' où sont stockées les variables value et type).

    Je souhaite réaliser une unique BD avec différentes tables dont une regroupant certaines informations.

    Dans cette nouvelle table j'ai déjà 11 clés primaires (année, entreprise, pays, cresta, etc...) et je voulais éviter d'en rajouter une autre (le type) pour ne pas multiplier le nombre de ligne par 3 qui sont déjà très nombreuses. D'où ma question. De plus cela m'éviterait de créer une table de référence avec la signification de la valeur étant de type 1 car se serait intégré dans le nom de ma nouvelle variable (en réalité value = SI, et type 1 = building donc value 1 serait buildingSI par exemple). Même s'il est vrai que cette table ne serait pas longue à créée cela permettrait de ne pas avoir à faire de jointure pour récupérer une certaine valeur de SI plus tard dans une requête.

    Mais j'ai bien compris que cela n'était pas possible et que c'était de l'esthétique.

  9. #9
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Citation Envoyé par blablabli Voir le message
    Dans cette nouvelle table j'ai déjà 11 clés primaires (année, entreprise, pays, cresta, etc...) et je voulais éviter d'en rajouter une autre (le type) pour ne pas multiplier le nombre de ligne par 3 qui sont déjà très nombreuses. D'où ma question.
    11 clés primaires ?
    Heu il n'y a qu'une seule clé primaire dans une table...

    Quelle méthode avez-vous utilisé pour modéliser votre table ?

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Oui il y en a 11 car l'unicité de chaque ligne dépend de 11 valeurs.
    Ce n'est pas moi qui est modélisé les tables, les schémas relationnels et logiques étaient déjà réalisés.

  11. #11
    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
    Citation Envoyé par blablabli Voir le message

    Dans cette nouvelle table j'ai déjà 11 clés primaires (année, entreprise, pays, cresta, etc...)
    Non, vous ne pouvez avoir qu'une seule clef primaire. Voulez-vous dire qu'elle comprend 11 colonnes ?

    Je vois cependant un cas dans lequel votre démarche pourrait être cohérente : si vous êtes dans le cas d'une modélisation par méta modèle et que vous voudriez changer cela pour une modélisation plus classique. Est-ce le cas ? Que représentent réellement vos value1, value2, value3,... :
    Vous restez trop imprécis sur le contexte pour que l'on puisse bien comprendre votre problème, et surtout vous proposer une solution efficace pour le résoudre

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Oui pardon je voulais dire que ma clé primaire contient déjà 11 colonnes.

    Je ne comprend pas les explications du méta modèle je n'ai jamais appris cette modélisation :/

    En fait dans les "BD d'origine" il y a une table avec la variable SI et la variable TYPE ainsi que d'autres informations dont certaines servant uniquement de lien avec les autres tables de la BD (généralements des identifiants).

    TYPE peut prendre plusieurs valeurs mais les seuls qui m'intéressent sont 1, 2et 3 qui correspondent respectivement à building, content et BI.

    Je souhaiterai que dans la nouvelle BD et donc dans la nouvelle table qu'il y ait trois colonnes mais une ligne plutôt que trois lignes et 2 colonnes. Ces trois nouvelles colonnes seraient buildingSI, contentSI et BISI.

    buildingSI correspondrait alors à value quand type = 1 et ainsi de suite.

  13. #13
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Dans ce cas, vous pouvez faire une requête du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT  <Clé primaire sans type>
              ,MAX (CASE WHEN type = 1 THEN value END) AS value1
              ,MAX (CASE WHEN type = 2 THEN value END) AS value2
              ,MAX (CASE WHEN type = 3 THEN value END) AS value3
       FROM votreTable
     GROUP BY <Clé primaire sans type>
    Eventuellement remplacer MAX par MIN selon la façon de trier les valeurs NULL.

  14. #14
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Merci c'est exactement ça sauf que quand je rajoute un insert pour l'insérer dans ma nouvelle table, une erreur est générée

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    Ah non désolée en fait j'avais fait une erreur ça fonctionne très bien même avec le insert.

    Merci beaucoup !!

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

Discussions similaires

  1. insert into avec condition
    Par xavioche77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/04/2010, 23h56
  2. insert into avec condition
    Par xavioche77 dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/04/2010, 12h33
  3. Insert into avec condition
    Par tibss dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/04/2009, 10h40
  4. requete Insert into avec conditions
    Par alexkickstand dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/07/2008, 17h38
  5. INSERT INTO avec conditions
    Par theoffss dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/05/2008, 15h20

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