Vous devez vous identifier pour créer des messages et des sujets.

SQL

bonjour à tous,
j'ai un problème avec la requête suivante :
select a.mat,
decimal(sum(a.z13), 11, 2) as debit,
decimal(sum(b.z13), 11, 2) as credit,
decimal(sum(a.z13 - b.z13), 11, 2) as solde
from pattcmc a
join pattcmc b
on a.mat = b.mat
where a.dtcr ='D' and b.dtcr ='C'
group by a.mat
le problème est le suivant :
le total DEBIT est = au total débit "normal" multiplié par le nombre de lignes "crédit"; et inversement pour le crédit !!!
ou me suis-je trompé ?
Merci d'avance.

salut,
Il faut "isoler" les zones debit et credit pour en faire la somme.. utiliser l'ordre CASE :

select a.mat,
decimal(sum( case when a.dtcr = 'D' then a.z13 else 0 end), 11, 2) as debit,
decimal(sum( case when a.dtcr = 'C' then a.z13 else 0 end), 11, 2) as credit,
decimal(sum(a.z13 - b.z13), 11, 2) as solde
from pattcmc a
join pattcmc b
on a.mat = b.mat
where a.dtcr ='D' and b.dtcr ='C'
group by a.mat

voilà
christian

----- Message d'origine -----
bonjour à tous,
j'ai un problème avec la requête suivante :
select a.mat,
decimal(sum(a.z13), 11, 2) as debit,
decimal(sum(b.z13), 11, 2) as credit,
decimal(sum(a.z13 - b.z13), 11, 2) as solde
from pattcmc a
join pattcmc b
on a.mat = b.mat
where a.dtcr ='D' and b.dtcr ='C'
group by a.mat
le problème est le suivant :
le total DEBIT est = au total débit "normal" multiplié par le nombre de lignes "crédit"; et inversement pour le crédit !!!
ou me suis-je trompé ?
Merci d'avance.

bonjour,
j'obtiens exactement le même résultat qu'avec la requête initiale; cela étant, j'ai trouvé une solution plus "simple" qui fonctionne parfaitement; je la colle ci-après au cas où cela peut intéresser .
Merci encore .
select mat,
decimal(sum( case when dtcr = 'D'
then z13 else 0 end) , 11, 2 )
as debit,
decimal(sum( case when dtcr = 'C' then z13 else 0 end), 11, 2)
as credit ,
decimal(sum(case when dtcr='D' then Z13 else z13 *-1 end), 11, 2)
as solde
from pattcmc
group by mat