2014-12-20 24 views
1

我有类似下面的表格:差异超过金额在SQL

PARENTREF TRANSTYPE(BIT(1)) DUEDATE(DateTime) TOTAL 
    2038     0   2015-01-01  1000 
    2038     1   2015-03-05  500 
    2039     0   2015-01-01  1000 
    2040     0   2015-01-01  1000 
    2041     0   2015-01-01  1000 
    2040     1   2015-04-07  200 

我想SELECT查询,返回SUM(TOTAL)当从SUM(TOTAL)TRANSTYPE=0减去每个不同PARENTREFTRANSTYPE=1。我也想在一个单独的列中的DUEDATEPARENTREFTRANSTYPE=0获得。可能只有一个PARENTREFTRANSTYPE=0,所以这不会是一个问题。换句话说,我应该得到下表:

PARENTREF DUEDATE(DateTime) TOTAL 
    2038   2015-01-01  500 
    2039   2015-01-01  1000 
    2040   2015-01-01  800 
    2041   2015-01-01  1000 

回答

2

(1-transtype*2)1transtype=0-1transtype=1,所以从total其中transtype=0价值total其中transtype=1查询数值相加。 max忽略null值,所以只选择不null值,其中transtype=0

select 
    parentref, 
    sum((1-transtype*2)*total) as total, 
    max(if(transtype=0,duedate,null)) as duedate 
from tablename 
group by parentref 
0

试试这个....

select t.PARENTREF,t.DueDate,(t.Total-isnull(m.Total,0)) as total 

    from tabl t LEFT outer join tabl m on t.PARENTREF=m.PARENTREF and t.TRANSTYPE <> m.TRANSTYPE 

    where (t.Transtype=0) and (isnull(m.Transtype,1)=1) 

请看看这个小提琴http://sqlfiddle.com/#!3/d4988/1

或使用thiss ...

select t.PARENTREF,t.DueDate,(sum(t.Total)-sum(isnull(m.Total,0))) as total 
    from tabl t LEFT outer join tabl m on t.PARENTREF=m.PARENTREF and t.TRANSTYPE <> m.TRANSTYPE 
    where (t.Transtype=0) and (isnull(m.Transtype,1)=1) 
    group by t.PARENTREF,t.DueDate 

检查这个小提琴http://sqlfiddle.com/#!3/d4988/2