Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2011, 12h30   #1
Invité de passage
 
Inscription : mai 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 14
Points : 2
Points : 2
Par défaut pb de requête avec cumul

Bonjour à vous,

Je bute actuellement sur une requête avec plusieurs colonnes servant à cumuler des montants. (SGBD utilisé : INGRES)

J'ai donc une table immo avec des informations telle que le N°, le libéllé, la valeur d'acquisition, ect... et une autre table immohistofisc utilisée pour stocker les amortissements (chaque amortissement à une date)

Le but du jeu étant d'avoir une immo par ligne avec une colonne affichant le total des amortissements de l'année 2010 et une colonne à coté avec le total global des amortissements.

Voici mon approche :
Code :
1
2
3
4
5
6
7
8
SELECT i.cdentite, t.ct, i.cdimmo, i.lb35, money(i.mtactif) AS ValeurAcquisition, i.nofrpfisc,
CASE WHEN LEFT(f.per,4) = '2010' THEN money(SUM(f.mtcpt)) END AS amortderog,
money(sum(f.mtcpt)) AS amortcumulé
FROM immo i,tabclasimmo t,immohistofisc f
WHERE i.cdsoc = '03'
AND i.cdsoc = f.cdsoc AND i.cdimmo = f.cdimmo AND i.cdclasimmo = t.cdclasimmo
GROUP BY i.cdentite, t.ct, i.cdimmo, i.lb35, i.mtactif, i.nofrpfisc, f.per
ORDER BY i.cdimmo
Le pb est que j'ai une ligne par amortissement à cause du champ "per".
Mais si je le retire du GROUP BY, ma requête est refusée et me dit que je dois inclure tous les champs du SELECT dans le GROUP BY.

Voilà j'espère avoir été clair.

Merci d'avance pour vos lumières
Marco94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 13h11   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Je ne suis pas sur d'avoir bien compris votre requete.
Dans votre CASE, Le SUM est mal placé. (en fait il ne sert a rien !)
Vous devez faire la somme du résultat du CASE, et non l'inverse...
Ainsi votre colonne f.per se retrouve bien dans une fonction d'agregat

Essayez comme ceci :
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
SELECT 
	i.cdentite, 
	t.ct, i.cdimmo, 
	i.lb35, 
	money(i.mtactif) AS ValeurAcquisition, 
	i.nofrpfisc,
	money(
		SUM(
			CASE LEFT(f.per,4) 
				WHEN '2010' THEN money(f.mtcpt)
				ELSE 0
			END
		)
	) AS amortderog,
	money(sum(f.mtcpt)) AS amortcumulé
FROM 
	immo i,
	tabclasimmo t,
	immohistofisc f
WHERE i.cdsoc = '03'
AND i.cdsoc = f.cdsoc AND i.cdimmo = f.cdimmo AND i.cdclasimmo = t.cdclasimmo
GROUP BY i.cdentite, t.ct, i.cdimmo, i.lb35, i.mtactif, i.nofrpfisc
ORDER BY i.cdimmo
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 13h15   #3
Invité de passage
 
Inscription : mai 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 14
Points : 2
Points : 2
C'est exactement ça !

Effectivement je résonnais à l'envers, merci pour votre aide
Marco94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h23.


 
 
 
 
Partenaires

Hébergement Web