是这样的,我数据库内有一张表,字段是,费用名称,币制名称,结算状态(只有两个值1为结算0为未结算),费用类型(有两个值1为应收费用,0为应付费用),金额,我需要做的是根据查询条件查出,已付金额,已收金额,币制名称,和利润,利润是已收减已付,(已收就是已结算),求高手解答,昨晚加了个通宵和今天一上午,就弄这个,求求各位了qq397870376

解决方案 »

  1.   


    select a.sum(金额) 已收金额,b.sum(金额) 已付金额,a.sum(金额)-b.sum(金额) 利润 from (select * from 表 where 结算状态=1 and 费用类型=1 ) a full outer join (select * from 表 where 结算状态=1 and 费用类型=0 ) b  
      

  2.   

    with cte as
    (
    select * from 表 where 结算状态=1 and 费用类型=1 union all
    select * from 表 where 结算状态=1 and 费用类型=0 
    )select a.sum(金额) 已收金额,b.sum(金额) 已付金额,a.sum(金额)-b.sum(金额) 利润 from 
    cte
      

  3.   

    with cte as(SELECT id,币制名称,已付金额=SUM(case when 费用类型=0 and 结算状态=1 then 金额 else 0 end)               ,已收金额=SUM(case when 费用类型=1 and 结算状态=1 then 金额 else 0 end)                ,利润=SUM(case when 费用类型=0 and 结算状态=1 then 金额 else 0 end)-SUM(case when 费用类型=1 and 结算状态=1 then 金额 else 0 end)                from B                group by 币制名称)select a.ID,Name,Con,b.币制名称,应收金额,应付金额,利润fromA inner join B on a.id=b.id
      

  4.   

    with cte as
    (
    SELECT id,币制名称
    ,已付金额=SUM(case when 费用类型=0 and 结算状态=1 then 金额 else 0 end)               
    ,已收金额=SUM(case when 费用类型=1 and 结算状态=1 then 金额 else 0 end)                
    ,利润=SUM(case when 费用类型=0 and 结算状态=1 then 金额 else 0 end)-SUM(case when 费用类型=1 and 结算状态=1 then 金额 else 0 end)                
    from B                
    group by 币制名称
    )
    select a.ID,Name,Con,b.币制名称,应收金额,应付金额,利润
    from
    A inner join B on a.id=b.id
      

  5.   

    只要中间那部分就可以了吧
    SELECT id,币制名称
    ,已付金额=SUM(case when 费用类型=0 and 结算状态=1 then 金额 else 0 end)               
    ,已收金额=SUM(case when 费用类型=1 and 结算状态=1 then 金额 else 0 end)                
    ,利润=SUM(case when 费用类型=0 and 结算状态=1 then 金额 else 0 end)-SUM(case when 费用类型=1 and 结算状态=1 then 金额 else 0 end)                
    from B                
    group by 币制名称