Pb avec une requete SQL

Résolu
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 - 10 sept. 2004 à 10:55
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 - 14 sept. 2004 à 08:27
Bonjour,

Je vais essayé d'être clair

J'ai une table : COMPTE

champ : Credit,Debit,Date

je voudrais faire une requete qui me renvoie
Credit,Debit ainsi que le cumul du credit et du debit de tous les enregistrement ou la date est inferieure à la date de l'enregsitrement en cours.

J'ai essayé une requete du genre

SELECT CREDIT,DEBIT,DATE as MaDate, (SELECT SUM(CREDIT),SUM(DEBIT) FROM COMPTE WHERE DATE <= MaDate) FROM COMPTE

il me renvoie une message d'erreur : MaDate nom de colonne incorrecte.

Je voudrais savoir si je suis sur la bonne et si c'est la cas comme faire le lien entre la date de ma sous requete et la date de ma requete principale

D'avance merci

22 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 sept. 2004 à 14:38
J'ai beau essayer, je ne parviens aps a le faire en une requete....

en voilà deux, pour la peine !

Pour obtenir le cumul pour chaque mois
SELECT DISTINCT SUM(T2.DEBIT) AS CUMUL_DEBIT, SUM(T2.CREDIT) AS CUMUL_CREDIT, T1.C_DATE
FROM COMPTE AS T1, COMPTE AS T2
WHERE T1.C_DATE = (SELECT MAX(C_DATE) FROM COMPTE WHERE MONTH(C_DATE)=MONTH(T1.C_DATE) )

AND  
MONTH(T1.C_DATE)=MONTH(T2.C_DATE)
AND  YEAR(T1.C_DATE)=YEAR(T2.C_DATE)
GROUP BY T1.C_DATE;


et une pour obtenir le cumul tout court
SELECT  SUM(DEBIT) AS CUMUL_DEBIT, SUM(CREDIT) AS CUMUL_CREDIT FROM COMPTE


Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
3
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
10 sept. 2004 à 10:58
c une requète ke tu fe dans access?
0
cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010
10 sept. 2004 à 11:06
Ne pas utiliser de champs DATE, c'est un champ réservé dans le SQL, il faut renomer ton DATE par un autre nom: exemple: DATE_

Bart-Rennes
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 11:10
crn_c21
Je fais cette requete sous SQL Server

jcq
J'utilise pas de champ DATE j'ai tapé comme ça pour simplifier

Ca donnerais plutot

SELECT CREDIT,DEBIT,C_DATE as MaDate, (SELECT SUM(CREDIT),SUM(DEBIT) FROM COMPTE WHERE C_DATE <= MaDate) FROM COMPTE
Et il dit MaDate nom de colonne incorrect
J'ai essayé avec d'autre nom dans le cas ou MaDate etait aussi un champ reservé et pareil même message
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
10 sept. 2004 à 11:13
J'aurais plutôt vu une requête du Type :

SELECT *, Sum(CREDIT) as SomC, Sum(DEBIT) as SomD FROM Compte Where Date <= #" & MaDate & " #

Conseil evite les champs ou les Variables avec des Noms Réservé à VB comme DAte...tu risques davoir des Soucis

It@li@
0
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
10 sept. 2004 à 11:15
WHERE C_DATE <= ' " & MaDate & " ')
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 11:36
Italia
Je savais pour les champs reservés je m'en sers pas je l'avais juste mis pour simplifier ici désolé je le ferais plus

J'ai essayé ta requete le probleme et qu'il veux que j'ajoute tous les champs contenu dans * dans la clause group by or je ne peux pas faire un group by sur le CREDIT et le DEBIT.

De plus j'ai oublié de preciser je ne fais pas cette requete je la fait dans un lot DTS de SQL que j'enregsitre ensuite au format module de VB donc je ne peux pas mettre des lignes comme crn_c21 m'a proposé.

Et je ne peux pas le faire par code en faisant une boucle etant donné que ma requete me retourne plus de 200000 enregistrements donc je vais essayé d'eviter de faire une boucle
0
safarijr Messages postés 23 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
10 sept. 2004 à 11:55
Bjr,

Je pense que ta requête a un petit soucis :

Quand tu dis "WHERE DATE <= MaDate", la valeur de MaDate n'est pas encore connue car "SELECT CREDIT,DEBIT,DATE as MaDate" est effectué après.

En fait SQL effectue d'abord la requête imbriquée (entre parenthèses) puis l'autre requete.

Bonne chance

@+ ;)
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 12:07
safarijr
si j'ai bien compris ma requete devrait ressembler à ça

SELECT SUM(CREDIT) AS CRED, SUM(DEBIT) AS DEB,
(SELECT CREDIT, DEBIT, C_DATE AS MaDate
FROM T_ECRITURE
WHERE ID_CODE = '40425') AS SOUSREQ
FROM T_COMPTE
WHERE (C_DATE <= madate)

Le pb est le même

A moins que j'ai rien compris à ce que tu as voulu me dire ce qui est fort possible parce que j'ai tjs eu du mal pour comprendre les requetes imbriqués
0
safarijr Messages postés 23 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
10 sept. 2004 à 12:23
Quel est l'intérêt dans ton cas de faire une requête imbriquée ?

En fait, je vois ce que tu cherches à faire : liste les mouvements d'un compte avec une colonne de cumul des débit et une colonne de cumul des crédits.

Je pense que c'est pas tellement réalisable avec une simple requête (sous-requête). Il va sans doute falloir que tu passes par une procédure stockée utilisant une table temporaire pour faire ce cumul.
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 12:35
c'est exactement ça ce que je cherche à faire.

En fait ce que je voulais c'etait le faire en une requete parce qu'enormement de ligne mais bon sinon je vais le faire par code !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2004 à 13:12
Pas de requetes imbriquées :

SELECT SUM(T2.DEBIT) AS CUMUL_DEBIT , SUM(T2.CREDIT) AS CUMUL_CREDIT, T1.C_DATE, T1.DEBIT, T1.CREDIT FROM COMPTE T1 ,COMPTE T2 WHERE T2.C_DATE <= T1.C_Date GROUP BY T1.C_DATE , T1.CREDIT , T1.DEBIT;


Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2004 à 13:13
Enfin, si j'ai bien compris....

ici, ca liste chaque mouvement, triés par date, avec a chaque fois, le cumul des credits, et celui des debits, en fonction du mouvement considéré...
0
safarijr Messages postés 23 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
10 sept. 2004 à 13:20
Bien vu Renfield, j'avais pas pensé à la jointure...
0
safarijr Messages postés 23 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 30 mai 2005
10 sept. 2004 à 13:26
Il reste quand même un soucis s'il y a plusieur mouvements à la même date, il faut certainement compléter avec un n° d'écriture au sein de la même journée...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2004 à 13:27
oui, tu as pas parlé de clé autre que la date.... j'ai fais avec ;-)

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 14:18
Je vais essayé tout ça de suite merci bcp
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 14:36
J'ai oublié de preciser un petit point

Ma table est
ECRITURE

les champs
id(numauto)
compte
e_date
debit
credit

il me faut le credit, le debit , le credit cumulé et le debit cumulé
tout ça doit etre groupé par compte et par mois
le souci c'est qu'il m'oblige à mettre credit et debit dans le group by. Y a t'il un moyen pour ne pas etre obliger de mettre les champs du select dans la clause group by !
0
cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 2
10 sept. 2004 à 14:59
Je n'arrive pas à la faire tourner, T1 & T2 d'apres ta requete sont la même table si j'ai tout compris. Quand je mets la restrictions sur la date il me la sort du where et m'ajoute une jointure. De plus il me cumul rien de tout et je ne peux pas mettre les champs credit et debit parce qu'il veux que je les ajoute dans le group by.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2004 à 17:13
places les dans le group by, où est le problème ?

j'ai mis cette requète au point sous Access, elle fonctionne....

Amusez-vous ! ;)
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS
0
Rejoignez-nous