web-dev-qa-db-ja.com

正の数と負の数をそれぞれの列に分ける方法は?

次の列とデータを含むテーブルがあります。

activity_dt | activity_amt
 2009-01-01 |   -500
 2009-01-01 |    750

activity_amtの符号を調べて、正の場合はcredits列に入れ、負の場合はdebits列に入れるクエリを作成できますか? (私はSybaseを使用しています)

activity_dt | debits | credits
 2009-01-01 |  -500  |   750
19
Mike Sickler
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
37
schinazi

Sybaseの正確な構文についてはわかりませんが、日付でグループ化して正の値と負の値を合計できるはずです。

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
5
Guffa
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
0
TinTin

DECODE関数を使用して、この問題に対する新しい答えを見つけました。これがすべての人に役立つことを願っています。

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;
0
Mihir Kale