|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
bonjour,
je travaille sous FireBird 2.5 j'ai 3 requetes de sélection qui me renvoient chacune 16 enregistrements de plusieurs champs. je voudrais faire la somme du champ1 des 3 requetes, enregistrement par enregistrement c'est à dire valeur1 de champ1 de requete1 + valeur1 de champ1 de requete2 + valeur1 de champ1 de requete3 puis ensuite valeur2 de champ1 de requete1 + valeur2 de champ1 de requete2 + valeur2 de champ1 de requete3 etc ... au final j'obtiens encore 16 enregistrements comment faire ? (quitte à faire une procedure stockée si nécessaire) |
|
|
00
|
|
|
#2 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 445 ![]() |
Je ne comprends pas bien ta question ?
Peux-tu nous montrer :
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
voici la 1ere requete (les 2 autres sont similaires)
Code :
je veux additionner la valeur du champ UTJ_QTETOT de l'enregistrement n°1 de la requete n°1 ci-dessus avec la valeur du champ UTJ_QTETOT de l'enregistrement n°1 de la requete n°2 et avec la valeur du champ UTJ_QTETOT de l'enregistrement n°1 de la requete n°3 puis faire de même avec les enregistrements n°2 et ainsi de suite jusqu'au dernier enregistrement (n°16) au final j'obtiens 16 enregistrements dont j'ai additionné la colonne UTJ_QTETOT ligne à ligne des 3 requetes |
||
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour
les differentes requetes sont peut etre similaires, mais utilises-t-elles les memes tables ? et n'y a t-il pas moyen de simplifier les requetes (juste pour nous permettre de la regarder sans se preoccuper des details non utiles pour ton probleme) ![]() a+ |
|
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
voici la requete simplifiée
Code :
Ce qui m'intéresse c'est de savoir comment calculer la somme d'un champ ligne par ligne à partir de plusieurs requetes ... |
||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : octobre 2008 Messages : 1 505 ![]() |
Pour une solution en SQL, c'est-à-dire non procédurale, il faudrait ajouter un numéro de ligne dans tes 3 requêtes pour pouvoir apparier ligne à ligne les 3 jeux de résultat par jointure. A moins qu'une de tes colonnes puisse jouer un rôle similaire, mais on ne peut pas le deviner sans connaître le rôle des colonnes. Sinon le moteur SQL ne saura jamais quelle ligne du résultat 1 doit correspondre à quelle ligne du résultat 2 ou du résultat 3.
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
bonjour estofilo,
peux tu me donner un exemple simple en SQL de ton explication pour l'addition ligne par ligne d'un champ commun à 2 requetes par exemple |
|
|
00
|
|
|
#8 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
pas facile a comprendre
les 3 requetes ont-elles les memes criteres de selection. en d'autres termes: Code :
|
||
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
oui les 3 requetes ont les mêmes critères de sélection : le FROM et le WHERE sont identiques. seul le calcul du champ UTJ_QTETOT change, tout le reste est identique
|
|
|
00
|
|
|
#10 | ||
![]() ![]() Inscription : octobre 2008 Messages : 1 505 ![]() |
Prenons un exemple simplifié dans le cas général: additionner la colonne col1 de 3 jeux de résultats avec une colonne col_id permettant d'apparier les jeux de résultat entre eux.
Ca donnerait quelque chose du genre: Code :
|
||
|
|
00
|
|
|
#11 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
dans ce cas il faut mettre les 3 calculs dans la meme requete
Code :
|
||
|
|
00
|
|
|
#12 | |
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
Olivier j'avais déjà testé ta proposition mais ça ne marche pas. l'exécution de la requete renvoie le message d'erreur suivant
Citation:
|
|
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Dans une bases de données les lignes (et non pas les "enregistrements", cela n'existe pas et constitue une faute lourde de compréhension) n'ont pas d'ordre. Donc dire je veux additionner la ligne 1 avec la ligne 1 d'une autre requête n'a ps de sens, les données étant ensemblistes.
A lire sur le sujet : http://blog.developpez.com/sqlpro/p5...sont-des-ense/ Pour faire ce que vous voulez, il faut numéroter les lignes, soit das la table, soit dans une sous requête à l'aide de ROW_NUMBER (fonction de fenêtrage). Lire : http://sqlpro.developpez.com/article...clause-window/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#14 | |||||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Si par exemple vous avez : requete 1: Code SQL :
requete 2 : Code SQL :
Faites : Code SQL :
|
|||||||
|
|
00
|
|
|
#15 | ||
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
bonjour aieeeuuuuu
Citation:
Citation:
|
||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
sans le code, pas facile de répondre...
a priori, vous additionnez le résultat de deux SELECT qui renvoient plus d'une colonne... Et nous n'avons pas non plus le code de vos autres requêtes, mais pour la première, pourquoi ne faites vous pas une jointure sur la table INVUTILISATIONJOUR plutôt que de faire une sous requête corrélée ? |
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Je n'avais pas vu la réponse de dehorter olivier
Et j'ai proposé la même chose. Avec vos 3 modes de calculs, il y aurait surement moyen de faire quelque de chose de plus optimsé (et sans l'erreur )
|
|
|
00
|
|
|
#18 | ||
|
Membre du Club
![]() Inscription : mars 2002 Messages : 233 ![]() |
désolé voici la requete simplifiée qui donne le message d'erreur "Multiple rows..." c'est le + entre les deux sum qui pose problème
Code :
|
||
|
|
00
|
|
|
#19 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Il faut que vous fassiez le select des sommes, et non les sommes des select :
Code :
|
||
|
|
00
|
|
|
#20 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
mais comme je disais, je pense que ce serait plus simple et plus performant en faisant une jointure sur la table INVUTILISATIONJOUR :
Code SQL :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com