Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Addition de champs de plusieurs tables en SQL avec UNION

7 réponses
Avatar
pubdespierre
Bonjour à tous, je cherche à sommer, enregistrement par
enregistrement, des champs de plusieurs tables (60 tables ...) ayant
la même structure et se trouvant dans la même base :

BASE1

Table1
[Date] [Volume]
10/12/03 1000
11/12/03 1500
12/12/03 2000

Table2
[Date] [Volume]
10/12/03 2000
11/12/03 2500
12/12/03 3000

Je cherche à obtenir, via une requète SQL utilisant UNION, le résultat
suivant :

Table1+Table2
[Date] [Volume]
10/12/03 3000(=1000+2000)
11/12/03 4000(=1500+2500)
12/12/03 5000(=2000+3000)

Ca doit être simple, mais j'ai perdu une demi-journée à chercher sur
le net ... si quelqu'un a une idée, je suis preneur. Merci à tous.

7 réponses

Avatar
Maxence HUBICHE
Si tu veux utiliser UNION, tu devras faire 2 requêtes :
-Celle qui fait l'union
-Celle qui fait la somme.

Ce qui te donnera pour la première :
SELECT [Date], Volume FROM Table1
UNION
SELECT [Date], Volume FROM Table2
UNION
SELECT [Date], Volume FROM Table3
...
SELECT [Date], Volume FROM Table30;


Et pour la seconde :
SELECT [Date], SUM(Volume)
FROM RequetePrecedente
GROUP BY [Date]


Voilà ;)
-----Message d'origine-----
Bonjour à tous, je cherche à sommer, enregistrement par
enregistrement, des champs de plusieurs tables (60
tables ...) ayant

la même structure et se trouvant dans la même base :

BASE1

Table1
[Date] [Volume]
10/12/03 1000
11/12/03 1500
12/12/03 2000

Table2
[Date] [Volume]
10/12/03 2000
11/12/03 2500
12/12/03 3000

Je cherche à obtenir, via une requète SQL utilisant
UNION, le résultat

suivant :

Table1+Table2
[Date] [Volume]
10/12/03 3000(00+2000)
11/12/03 4000(00+2500)
12/12/03 5000( 00+3000)

Ca doit être simple, mais j'ai perdu une demi-journée à
chercher sur

le net ... si quelqu'un a une idée, je suis preneur.
Merci à tous.

.



Avatar
pubdespierre
"Maxence HUBICHE" <nospam wrote in message news:<009e01c3c0dc$0d789410$...
Si tu veux utiliser UNION, tu devras faire 2 requ tes :
-Celle qui fait l'union
-Celle qui fait la somme.

Ce qui te donnera pour la premi re :
SELECT [Date], Volume FROM Table1
UNION
SELECT [Date], Volume FROM Table2
UNION
SELECT [Date], Volume FROM Table3
...
SELECT [Date], Volume FROM Table30;


Et pour la seconde :
SELECT [Date], SUM(Volume)
FROM RequetePrecedente
GROUP BY [Date]


Voil ;)
-----Message d'origine-----
Bonjour tous, je cherche sommer, enregistrement par
enregistrement, des champs de plusieurs tables (60
tables ...) ayant

la m me structure et se trouvant dans la m me base :

BASE1

Table1
[Date] [Volume]
10/12/03 1000
11/12/03 1500
12/12/03 2000

Table2
[Date] [Volume]
10/12/03 2000
11/12/03 2500
12/12/03 3000

Je cherche obtenir, via une requ te SQL utilisant
UNION, le r sultat

suivant :

Table1+Table2
[Date] [Volume]
10/12/03 3000(00+2000)
11/12/03 4000(00+2500)
12/12/03 5000( 00+3000)

Ca doit tre simple, mais j'ai perdu une demi-journ e
chercher sur

le net ... si quelqu'un a une id e, je suis preneur.
Merci tous.

.




Merci Maxence,
J'essaye ça de ce pas et je te reviens.


Avatar
pubdespierre
"Maxence HUBICHE" <nospam wrote in message news:<009e01c3c0dc$0d789410$...
Si tu veux utiliser UNION, tu devras faire 2 requ tes :
-Celle qui fait l'union
-Celle qui fait la somme.

Ce qui te donnera pour la premi re :
SELECT [Date], Volume FROM Table1
UNION
SELECT [Date], Volume FROM Table2
UNION
SELECT [Date], Volume FROM Table3
...
SELECT [Date], Volume FROM Table30;


Et pour la seconde :
SELECT [Date], SUM(Volume)
FROM RequetePrecedente
GROUP BY [Date]


Voil ;)
-----Message d'origine-----
Bonjour tous, je cherche sommer, enregistrement par
enregistrement, des champs de plusieurs tables (60
tables ...) ayant

la m me structure et se trouvant dans la m me base :

BASE1

Table1
[Date] [Volume]
10/12/03 1000
11/12/03 1500
12/12/03 2000

Table2
[Date] [Volume]
10/12/03 2000
11/12/03 2500
12/12/03 3000

Je cherche obtenir, via une requ te SQL utilisant
UNION, le r sultat

suivant :

Table1+Table2
[Date] [Volume]
10/12/03 3000(00+2000)
11/12/03 4000(00+2500)
12/12/03 5000( 00+3000)

Ca doit tre simple, mais j'ai perdu une demi-journ e
chercher sur

le net ... si quelqu'un a une id e, je suis preneur.
Merci tous.

.




Ca fonctionne ! J'ai créé mes deux requêtes SQL comme tu le décris, je
n'ai plus qu'à les appeler via VBA Excel avec la fonction SQLRequest
(si si, j'ai réussi à installer XLODBC.XLA ...), et j'aurai quelque
chose de propre.

Merci de ton aide, tu me retires une grosse épine du pied Maxence.


Avatar
pubdespierre
Je ne peux pas écrire une requète en dur sur tant de tables ... hélas
ça fonctionne bien tant que le nombre de tables est "raisonnable" ...
mais comme j'ai une soixantaine de tables à unir, Access me renvoie
"Requète trop complexe" ...

Existe-t-il un moyen, dans le "FROM" de l'instruction "SELECT",
d'indiquer que l'on voudrait travailler sur toutes les tables de la
base ?
Ou peut-être existe-il une façon sioux de programmer la "UNION" ...
d'autant plus qu'il vaut mieux avoir une requète propre et dynamique
parce que le jour où j'ajoute, ou je supprime une table, je préfère
être tranquille ...

ps: je sais qu'on peut saussissonner la requète sur 60 tables en
plusieurs requètes, mais j'aimerais d'abord savoir si on peut faire
quelquechose de propre.

Merci à tous !
Avatar
pubdespierre
(Tixu Oty) wrote in message news:...
Je ne peux pas écrire une requète en dur sur tant de tables ... hélas
ça fonctionne bien tant que le nombre de tables est "raisonnable" ...
mais comme j'ai une soixantaine de tables à unir, Access me renvoie
"Requète trop complexe" ...

Existe-t-il un moyen, dans le "FROM" de l'instruction "SELECT",
d'indiquer que l'on voudrait travailler sur toutes les tables de la
base ?
Ou peut-être existe-il une façon sioux de programmer la "UNION" ...
d'autant plus qu'il vaut mieux avoir une requète propre et dynamique
parce que le jour où j'ajoute, ou je supprime une table, je préfère
être tranquille ...

ps: je sais qu'on peut saussissonner la requète sur 60 tables en
plusieurs requètes, mais j'aimerais d'abord savoir si on peut faire
quelquechose de propre.

Merci à tous !



pas d'idée ?

Avatar
Rv
Salut,

Les spec d'access disent:
64000 caractères pour une requête et 32 tables pour une requête.
C'est la limite de 32 tables qui coince.

On pourrait contourner en VBA comme ceci:

Créer une table pour la requête (tempo)
Pour chaque table concernée (strTable)
Lancer la requête "INSERT INTO tempo([Date], Volume) SELECT
[Date], Volume FROM " & strTable
Fpour
Lancer la requête "SELECT [Date], SUM(Volume) FROM tempo GROUP BY
[Date]"
Supprimer la table pour la requête (tempo)

Il manque le moyen d'identifier les tables concernées! Nom? Description?
Toutes sauf les tables systèmes?, ...

A+

Rv

"Tixu Oty" a écrit dans le message de
news:
(Tixu Oty) wrote in message
news:...

Je ne peux pas écrire une requète en dur sur tant de tables ... hélas
ça fonctionne bien tant que le nombre de tables est "raisonnable" ...
mais comme j'ai une soixantaine de tables à unir, Access me renvoie
"Requète trop complexe" ...

Existe-t-il un moyen, dans le "FROM" de l'instruction "SELECT",
d'indiquer que l'on voudrait travailler sur toutes les tables de la
base ?
Ou peut-être existe-il une façon sioux de programmer la "UNION" ...
d'autant plus qu'il vaut mieux avoir une requète propre et dynamique
parce que le jour où j'ajoute, ou je supprime une table, je préfère
être tranquille ...

ps: je sais qu'on peut saussissonner la requète sur 60 tables en
plusieurs requètes, mais j'aimerais d'abord savoir si on peut faire
quelquechose de propre.

Merci à tous !



pas d'idée ?



Avatar
pubdespierre
Merci beaucoup Hervé,
J'ai "bourriné" en créant deux requêtes sur 30 tables chaque, en
inscrivant leur nom en dur en SQL sur ACCESS. C'est lourd et pas
dynamique du tout : le jour où j'ajoute une table, pas intérêt e
l'oublier dans mes requêtes SQL ...
Je vais étudier ta solution qui me parait de loin beaucoup plus
propre et plus sure.

A plus tard. Merci encore pour ton aide précieuse.