bonjour,
je demande votre aide pour réaliser une requête : En effet, j'ai rélisé ma
requête à l'aide d'une fonction et ça marche avec l'analyseur de requête mais
ma requête me génère l'erreur "délai de connexion" si je la lance à partir de
mon programme Dot net.
Définition de la fonction : Pour chaque compte général (j'en ai 4000), on
somme les montants de tous les mouvements (montant) qu’il y a eu au sur une
période comptable et on prend le mouvement le plus récent.
set @DebitBalance = 0
--je sélectionne mes 4000 comptes généraux
DECLARE MYCURSOR1 CURSOR LOCAL
FOR
SELECT DISTINCT(CG_SOLD_CG) FROM TSMCG_SOLDES
OPEN MYCURSOR1
--Première récupération
FETCH NEXT FROM MYCURSOR1
INTO @CG
WHILE @@FETCH_STATUS=0
BEGIN
set @Debit = 0
select @Debit = CG_SOLD_SOLDE_DEBIT from TSMCG_SOLDES,TSMCG_ECRITURE
where CG_SOLD_CG = @CG and
CG_SOLD_DATE_SOLDE =(select Max(CG_SOLD_DATE_SOLDE) from
TSMCG_SOLDES,TSMCG_ECRITURE
where CG_SOLD_DATE_SOLDE < @DebutPeriode and CG_SOLD_CG = @CG
--Ajouter le débit/crédit à la balance
set @DebitBalance = @DebitBalance + @Debit
--suivant
FETCH NEXT FROM MYCURSOR1
INTO @CG
END
Close MYCURSOR1
DEALLOCATE MYCURSOR1
RETURN @DebitBalance
==> Donc l'idée est de récupérer le montant pour la date le plus récente
(pour cela je fait le Max de date). Y a t il plus simple ? surtout comment
éviter cette boucle et faire une jointure des tables comptes généraux et
soldes ??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Med Bouchenafa
Tu peux effectivement eviter l'utilisation du curseur avec ces requetes A)Pour avoir la somme SELECT SUM(CG_SOLD_SOLDE_DEBIT) FROM TSMCG_SOLDES, TSMCG_ECRITURE WHERE CG_SOLD_DATE_SOLDE < @DebutPeriode AND CG_SOLD_CG = @CG
B) Pour avoir le dernier debit SELECT CG_SOLD_SOLDE_DEBIT, MAX(CG_SOLD_DATE_SOLDE) FROM TSMCG_SOLDES, TSMCG_ECRITURE WHERE CG_SOLD_DATE_SOLDE < @DebutPeriode AND CG_SOLD_CG = @CG GROUP BY CG_SOLD_SOLDE_DEBIT
Dans les deux cas, il faut cependant specifier la colonne de jointure entre tes deux tables
-- Bien cordialement Med Bouchenafa
"404 found" wrote in message news:
bonjour, je demande votre aide pour réaliser une requête : En effet, j'ai rélisé ma requête à l'aide d'une fonction et ça marche avec l'analyseur de requête mais ma requête me génère l'erreur "délai de connexion" si je la lance à partir de mon programme Dot net.
Définition de la fonction : Pour chaque compte général (j'en ai 4000), on somme les montants de tous les mouvements (montant) qu'il y a eu au sur une période comptable et on prend le mouvement le plus récent.
set @DebitBalance = 0 --je sélectionne mes 4000 comptes généraux DECLARE MYCURSOR1 CURSOR LOCAL FOR SELECT DISTINCT(CG_SOLD_CG) FROM TSMCG_SOLDES
OPEN MYCURSOR1
--Première récupération FETCH NEXT FROM MYCURSOR1 INTO @CG
WHILE @@FETCH_STATUS=0 BEGIN set @Debit = 0
select @Debit = CG_SOLD_SOLDE_DEBIT from TSMCG_SOLDES,TSMCG_ECRITURE where CG_SOLD_CG = @CG and CG_SOLD_DATE_SOLDE =(select Max(CG_SOLD_DATE_SOLDE) from TSMCG_SOLDES,TSMCG_ECRITURE where CG_SOLD_DATE_SOLDE < @DebutPeriode and CG_SOLD_CG = @CG --Ajouter le débit/crédit à la balance set @DebitBalance = @DebitBalance + @Debit --suivant FETCH NEXT FROM MYCURSOR1 INTO @CG
END
Close MYCURSOR1 DEALLOCATE MYCURSOR1
RETURN @DebitBalance
==> Donc l'idée est de récupérer le montant pour la date le plus récente (pour cela je fait le Max de date). Y a t il plus simple ? surtout comment éviter cette boucle et faire une jointure des tables comptes généraux et soldes ??
Merci de votre aide.
Tu peux effectivement eviter l'utilisation du curseur avec ces requetes
A)Pour avoir la somme
SELECT SUM(CG_SOLD_SOLDE_DEBIT)
FROM TSMCG_SOLDES, TSMCG_ECRITURE
WHERE CG_SOLD_DATE_SOLDE < @DebutPeriode AND CG_SOLD_CG = @CG
B) Pour avoir le dernier debit
SELECT CG_SOLD_SOLDE_DEBIT, MAX(CG_SOLD_DATE_SOLDE)
FROM TSMCG_SOLDES, TSMCG_ECRITURE
WHERE CG_SOLD_DATE_SOLDE < @DebutPeriode AND CG_SOLD_CG = @CG
GROUP BY CG_SOLD_SOLDE_DEBIT
Dans les deux cas, il faut cependant specifier la colonne de jointure entre
tes deux tables
--
Bien cordialement
Med Bouchenafa
"404 found" <404found@discussions.microsoft.com> wrote in message
news:D1502163-96F9-428E-BE11-9E28599180AA@microsoft.com...
bonjour,
je demande votre aide pour réaliser une requête : En effet, j'ai rélisé ma
requête à l'aide d'une fonction et ça marche avec l'analyseur de requête
mais
ma requête me génère l'erreur "délai de connexion" si je la lance à partir
de
mon programme Dot net.
Définition de la fonction : Pour chaque compte général (j'en ai 4000), on
somme les montants de tous les mouvements (montant) qu'il y a eu au sur
une
période comptable et on prend le mouvement le plus récent.
set @DebitBalance = 0
--je sélectionne mes 4000 comptes généraux
DECLARE MYCURSOR1 CURSOR LOCAL
FOR
SELECT DISTINCT(CG_SOLD_CG) FROM TSMCG_SOLDES
OPEN MYCURSOR1
--Première récupération
FETCH NEXT FROM MYCURSOR1
INTO @CG
WHILE @@FETCH_STATUS=0
BEGIN
set @Debit = 0
select @Debit = CG_SOLD_SOLDE_DEBIT from TSMCG_SOLDES,TSMCG_ECRITURE
where CG_SOLD_CG = @CG and
CG_SOLD_DATE_SOLDE =(select Max(CG_SOLD_DATE_SOLDE) from
TSMCG_SOLDES,TSMCG_ECRITURE
where CG_SOLD_DATE_SOLDE < @DebutPeriode and CG_SOLD_CG = @CG
--Ajouter le débit/crédit à la balance
set @DebitBalance = @DebitBalance + @Debit
--suivant
FETCH NEXT FROM MYCURSOR1
INTO @CG
END
Close MYCURSOR1
DEALLOCATE MYCURSOR1
RETURN @DebitBalance
==> Donc l'idée est de récupérer le montant pour la date le plus récente
(pour cela je fait le Max de date). Y a t il plus simple ? surtout comment
éviter cette boucle et faire une jointure des tables comptes généraux et
soldes ??
Tu peux effectivement eviter l'utilisation du curseur avec ces requetes A)Pour avoir la somme SELECT SUM(CG_SOLD_SOLDE_DEBIT) FROM TSMCG_SOLDES, TSMCG_ECRITURE WHERE CG_SOLD_DATE_SOLDE < @DebutPeriode AND CG_SOLD_CG = @CG
B) Pour avoir le dernier debit SELECT CG_SOLD_SOLDE_DEBIT, MAX(CG_SOLD_DATE_SOLDE) FROM TSMCG_SOLDES, TSMCG_ECRITURE WHERE CG_SOLD_DATE_SOLDE < @DebutPeriode AND CG_SOLD_CG = @CG GROUP BY CG_SOLD_SOLDE_DEBIT
Dans les deux cas, il faut cependant specifier la colonne de jointure entre tes deux tables
-- Bien cordialement Med Bouchenafa
"404 found" wrote in message news:
bonjour, je demande votre aide pour réaliser une requête : En effet, j'ai rélisé ma requête à l'aide d'une fonction et ça marche avec l'analyseur de requête mais ma requête me génère l'erreur "délai de connexion" si je la lance à partir de mon programme Dot net.
Définition de la fonction : Pour chaque compte général (j'en ai 4000), on somme les montants de tous les mouvements (montant) qu'il y a eu au sur une période comptable et on prend le mouvement le plus récent.
set @DebitBalance = 0 --je sélectionne mes 4000 comptes généraux DECLARE MYCURSOR1 CURSOR LOCAL FOR SELECT DISTINCT(CG_SOLD_CG) FROM TSMCG_SOLDES
OPEN MYCURSOR1
--Première récupération FETCH NEXT FROM MYCURSOR1 INTO @CG
WHILE @@FETCH_STATUS=0 BEGIN set @Debit = 0
select @Debit = CG_SOLD_SOLDE_DEBIT from TSMCG_SOLDES,TSMCG_ECRITURE where CG_SOLD_CG = @CG and CG_SOLD_DATE_SOLDE =(select Max(CG_SOLD_DATE_SOLDE) from TSMCG_SOLDES,TSMCG_ECRITURE where CG_SOLD_DATE_SOLDE < @DebutPeriode and CG_SOLD_CG = @CG --Ajouter le débit/crédit à la balance set @DebitBalance = @DebitBalance + @Debit --suivant FETCH NEXT FROM MYCURSOR1 INTO @CG
END
Close MYCURSOR1 DEALLOCATE MYCURSOR1
RETURN @DebitBalance
==> Donc l'idée est de récupérer le montant pour la date le plus récente (pour cela je fait le Max de date). Y a t il plus simple ? surtout comment éviter cette boucle et faire une jointure des tables comptes généraux et soldes ??