如何将正数和负数分成各自的列?
Posted
技术标签:
【中文标题】如何将正数和负数分成各自的列?【英文标题】:How to separate positive and negative numbers into their own columns? 【发布时间】:2010-12-14 12:05:13 【问题描述】:我有一个包含以下列和数据的表格:
activity_dt | activity_amt
2009-01-01 | -500
2009-01-01 | 750
我是否可以编写一个查询来查看activity_amt
的符号,如果它是正数则将它放在贷方列中,如果它是负数则将它放在借方列中? (我正在使用 Sybase)
activity_dt | debits | credits
2009-01-01 | -500 | 750
【问题讨论】:
大多数会计系统避免在数据库中使用负数。它们有两个字段:金额始终为正数,以及交易是借记还是贷记的标志字段。 是的,我知道这一点。 很好的问题解决了我很多问题。顺便说一句,您是否注意到,当您将正百分比添加到负百分比时,净值不会平方...如果资产上涨 100% 并下跌 50%,它们处于相同的价格点.. 我希望你得到我的意思是..所以它有点需要一个案例陈述来将负数添加到正数,因此还有一个理由总是保持积极!!!! 【参考方案1】: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
【讨论】:
谢谢! +1 快速抽签。【参考方案2】:我不确定 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
【讨论】:
为了对称,你可以使用 '' 而不会造成任何创伤 - 零将被视为零... @Jonathan:是的,在这种情况下。我主动选择使用补充运算符,以便包含所有记录,以防此示例用于稍有不同的内容。 :) 感谢乔恩!是的,但是如何确定如果您将 0 排除在外,则记录将被计算在内,在这种情况下,这是有道理的,因为您只是将 0 相加,但是这个简单的选择实际上可能涉及与平均值的变化,如总和(当 activity_amt > 0 时 activity_amt = activity_amt - MEAN_OF_A_SET_OF_NUMBERS 否则 .. 对称地我会做 amt > 0 时的情况,amt @user1974729:你可以总结更多的东西,但OP只问了正负数。 完全感谢您指出将计算 0 而根本不会计算 NULL。这需要很多经验才能弄清楚。我永远对 0 的边界条件感到困惑,NULL 因为他们总是回来伤害我,所以我建议像我这样的用户单独使用 0 语句,而不是像这样的高级用户你有它覆盖..【参考方案3】: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
【讨论】:
【参考方案4】:我使用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;
【讨论】:
以上是关于如何将正数和负数分成各自的列?的主要内容,如果未能解决你的问题,请参考以下文章