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 :

jointure externe entre deux select


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 72
    Par défaut jointure externe entre deux select
    bonjour;

    j'aimerais alimenter ma target à partir du résultat d'une jointure externe entre deux select. j'ai essayé de le faire mais j'ai toujours erreur avant même l'éxecution.
    j'utilise sql derver donc c'est du transact sql

    merci d'avance

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Conformément aux règles de ce forum, il faudrait que vous donniez la description de vois tables, la requête que vous avez essayée, un petit jeu de données et le résultat attendu pour qu'on puisse vous aider efficacement.

    Là je ne peux que vous donner une généralité faisable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT les_colonnes
    FROM
    (
      SELECT des_colonnes
      FROM une_table
      WHERE une_condition
    ) t1
    LEFT OUTER JOIN 
    (
      SELECT d_autres_colonnes
      FROM une_autre_table
      WHERE une_autre_condition
    ) t2 ON t1.une_colonne = t2.une_autre_colonne
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 72
    Par défaut
    Bonjour;

    voila le code que j'ai fait mais il y a un problème les donnée dans les champs ( A - B ) sont pas correct il me renvoie pas la difference entre les champs récupérés.






    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    INSERT INTO T_Target
     
    (
    Id
    ,[Type]
    ,[DebitV]
    ,[DebitRV]
    ,[CreditNV]
    ,[CreditRV]
    ,[Date])
     
     
        SELECT 
                      A.[id]
                         ,('Mm')
                         ,A.[DebitV] - B.[DebitV]
                         ,A.[DebitRV] - B.[DebitRV]
                         ,A.[CreditNV] - B.[CreditNV]
                         ,A.[CreditRV] - B.[CreditRV]
                         ,GETDATE () 
                        FROM 
                        ( 
                         SELECT 
                      Id
                         ,[Type]
                         ,[DebitV]
                         ,[DebitRV]
                         ,[CreditNV]
                         ,[CreditRV]
                         ,[Date])
     
                    from     
                    T_Rource 
                        WHERE Id = @CM AND
                         [Type] = 'K'                 
                        ) A
     
     
                        LEFT OUTER JOIN 
     
                        (
     
                        SELECT 
                      Id
                         ,[Type]
                         ,[DebitV]
                         ,[DebitRV]
                         ,[CreditNV]
                         ,[CreditRV]
                         ,[Date])
     
                    from     
                    T_Rource 
                    WHERE Id = @CMi AND
                     [Type] = 'K'
     
                        ) B 
     
                        ON A.[Type] = B.[Type]

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    As-tu essayé la partie SELECT toute seule, et chaque sous-requête SELECT ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

    C'est parce que vous avez mis des parenthèses entre le SELECT et le FROM pour encadrer la liste de colonnes : ce n'est pas nécessaire, et cela ne respecte pas la syntaxe T-SQL.

    Vous pouvez donc écrire :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    INSERT INTO dbo.T_Target
    (
    	Id
    	, Type
    	, DebitV
    	, DebitRV
    	, CreditNV
    	, CreditRV
    	, Date
    )
    SELECT		A.id
    		, 'Mm'
    		, A.DebitV - B.DebitV
    		, A.DebitRV - B.DebitRV
    		, A.CreditNV - B.CreditNV
    		, A.CreditRV - B.CreditRV
    		, GETDATE () 
    FROM		( 
    			SELECT	Id
    				, Type
    				, DebitV
    				, DebitRV
    				, CreditNV
    				, CreditRV
    				, Date
    			FROM     dbo.T_Rource 
    			WHERE	Id = @CM 
    			AND	Type = 'K' 
    		) AS A
    LEFT JOIN	(
    			SELECT	Id
    				, Type
    				, DebitV
    				, DebitRV
    				, CreditNV
    				, CreditRV
    				, Date 
    			FROM	dbo.T_Rource 
    			WHERE	Id = @CMi 
    			AND	Type = 'K'
    		) AS B 
    		ON A.Type = B.Type
    Mais comme vous l'a conseillé CinePhil, testez le SELECT seul avant d'exécuter l'INSERT, pour être sûr de ce que vous allez insérer dans la table dbo.T_Target.

    En outre, n'oubliez pas de qualifier le nom des tables et autres objets de base de données (vues, procédures, fonctions, ...) par le nom du schéma auquel ils appartiennent : cela évite à SQL Server de le chercher à votre place.
    C'est du pouillème, mais les pouillèmes additionnés, s'il n'y étaient pas parfois, ça éviterait des petits problèmes de performances

    Ne mettez pas non plus de crochets ou de parenthèses quand ce n'est pas nécessaire.
    Les crochets décorant les colonnes ne sont nécessaires que si les colonnes n'ont pas été nommées en respectant le standard SQL, ce qui n'est apparemment pas votre cas

    Enfin indentez votre code, tout le monde y verra plus clair : vous, vos collègues, et nous

    @++

  6. #6
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 72
    Par défaut
    Bonjour;

    je vois pas la parentèse qui n'est pas nécessaire dans mon code j'ai enlevé celle entre select et from comme vous l'avez dit mais il m'affiche erreur avant même d'éxecuter.

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/05/2012, 15h19
  2. jointure entre deux select
    Par zoheir13 dans le forum SQL
    Réponses: 7
    Dernier message: 28/03/2009, 13h34
  3. [MySQL] Interaction entre deux select name
    Par magictom42 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/07/2008, 14h43
  4. Données externes entre deux classeurs
    Par hkpsyco dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/10/2007, 13h17
  5. jointures externes entre plusieurs tables
    Par hacksi dans le forum Access
    Réponses: 22
    Dernier message: 15/05/2006, 16h26

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