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
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
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
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]
As-tu essayé la partie SELECT toute seule, et chaque sous-requête SELECT ?
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 :
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.
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
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
@++
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.
Petite question: vous dites qu'il ne fait pas la soustraction des valeurs: pouvez vous être plus précis?
Les données sont elles erronées ou retournent'elles NULL?
Pourquoi faites vous un LEFT JOIN? si B ne retourne rien votre requete retournera NULL pour tous les champ ou vous faites la soustraction.
Essayez celà?
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 INSERT INTO dbo.T_Target ( Id , Type , DebitV , DebitRV , CreditNV , CreditRV , Date ) SELECT A.id , 'Mm' , A.DebitV - ISNULL(B.DebitV,0) , A.DebitRV - ISNULL(B.DebitRV,0) , A.CreditNV - ISNULL(B.CreditNV,0) , A.CreditRV - ISNULL(B.CreditRV,0) , 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
bonjour;
la requête me retourne null pour les champs ou je fais la soustarction. j'ai vérifié et c'est la première sous requête qui retourne rien donc je vais essayer de corriger ça et je posterais la solution apres.
merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager