J'ai une table avec les colonnes et les données suivantes:
activity_dt | activity_amt
2009-01-01 | -500
2009-01-01 | 750
Puis-je écrire une requête qui examine le signe de activity_amt
et la place dans la colonne crédits si elle est positive et la colonne débits si elle est négative? (J'utilise Sybase)
activity_dt | debits | credits
2009-01-01 | -500 | 750
select activity_dt,
sum(case when activity_amt < 0 then activity_amt else 0 end) as debits,
sum(case when activity_amt > 0 then activity_amt else 0 end) as credits
from the_table
group by activity_dt
order by activity_dt
Je ne suis pas sûr de la syntaxe exacte dans Sybase, mais vous devriez pouvoir grouper par date et résumer les valeurs positive et négative:
select
activity_dt,
sum(case when activity_amt < 0 then activity_amt else 0 end) as debits,
sum(case when activity_amt >= 0 then activity_amt else 0 end) as credits
from
theTable
group by
activity_dt
select (select JV_GroupsHead.GroupTitle
from JV_GroupsHead
whereJV_GroupsHead.Id=jv.GroupId) as 'GroupName'
,jv.Revenue
,jv.AccountNo
,jv.AccountNoTitle
,(case when jv.Revenue < 0 then jv.Revenue else 0 end) as 'debits'
,(case when jv.Revenue> 0 then jv.Revenue else 0 end) as 'credits'
from JVFunction1('2010-07-08','2010-08-08') as jv
J'ai trouvé une nouvelle réponse à ce problème en utilisant la fonction DECODE
. J'espère que cela s'avérera utile pour tout le monde.
select activity_dt,
sum((DECODE(activity_amt /-ABS(activity_amt), 1, activity_amt, 0))) as credits,
sum((DECODE(activity_amt /-ABS(activity_amt), -1, activity_amt, 0))) as debits
from the_table
group by activity_dt
order by activity_dt;