declare @pid varchar(10),@pname varchar(10),@summ money,@payed money,@monthplan money,@monthless money,@payfor money 
set @pid = '总 计:' 
set @pname='' 
set @summ=(select sum(summ) from money) 
set @payed=(select sum(payed) from money) 
set @monthplan=(select sum(monthplan) from money) 
set @monthless=(select sum(monthless) from money) 
set @payfor=(select sum(payfor) from money) 
select * from 
(
select pj.pid ,pj.pname ,mn.summ ,mn.payed,mn.monthplan,mn.monthless,mn.payfor from project as pj left join money as mn on pj.pid=mn.pid 
union 
select @pid as pid,@pname as pname,@summ as summ,@payed as payed,@monthplan as monthplan,@monthless as monthless,@payfor as payfor 
union 
select pje.pid ,pje.pname,pje.summ ,sum(mn.payed)as payed,pje.monthplan,pje.monthless,pje.payfor from money as mn,project as pj  left join pje on pj.bid=pje.bid where mn.pid=pj.pid group by pje.pid ,pje.pname,pje.summ ,pje.payed,pje.monthplan,pje.monthless,pje.payfor 
) t 
order by case pid when '总 计:' then 1 else 0 end
GO 
昨晚这样还不行吗?

解决方案 »

  1.   

    declare @pid varchar(10),@pname varchar(10),@summ money,@payed money,@monthplan money,@monthless money,@payfor money 
    set @pid = '' 
    set @pname='总 计:' 
    set @summ=(select sum(summ) from money) 
    set @payed=(select sum(payed) from money) 
    set @monthplan=(select sum(monthplan) from money) 
    set @monthless=(select sum(monthless) from money) 
    set @payfor=(select sum(payfor) from money) 
    select * from 
    (
    select pj.pid ,pj.pname ,mn.summ ,mn.payed,mn.monthplan,mn.monthless,mn.payfor from project as pj left join money as mn on pj.pid=mn.pid 
    union 
    select @pid as pid,@pname as pname,@summ as summ,@payed as payed,@monthplan as monthplan,@monthless as monthless,@payfor as payfor 
    union 
    select pje.pid ,pje.pname,pje.summ ,sum(mn.payed)as payed,pje.monthplan,pje.monthless,pje.payfor from money as mn,project as pj  left join pje on pj.bid=pje.bid where mn.pid=pj.pid group by pje.pid ,pje.pname,pje.summ ,pje.payed,pje.monthplan,pje.monthless,pje.payfor 
    ) t
    order by case pname when '总 计:' then 1 else 0 end
    GO 
      

  2.   

    union隐藏了排序功能,它会按照select 的list进行排序。
    比如select f1,f2 from ta union select f1,f2 from tb
    它的结果会按f1,f2排序。你的pid,pname的值变化了,排序的结果当然也就变化了。
    想重新指定排序,试试:select * from 
    (
    select pj.pid ,pj.pname ,mn.summ ,mn.payed,mn.monthplan,mn.monthless,mn.payfor from project as pj left join money as mn on pj.pid=mn.pid 
    union 
    select @pid as pid,@pname as pname,@summ as summ,@payed as payed,@monthplan as monthplan,@monthless as monthless,@payfor as payfor 
    union 
    select pje.pid ,pje.pname,pje.summ ,sum(mn.payed)as payed,pje.monthplan,pje.monthless,pje.payfor from money as mn,project as pj  left join pje on pj.bid=pje.bid where mn.pid=pj.pid group by pje.pid ,pje.pname,pje.summ ,pje.payed,pje.monthplan,pje.monthless,pje.payfor 
    ) t
    order by 你的顺序
      

  3.   

    可以了,用htl258的方法又弄了一次,谢谢各位的帮助,在此多谢各位......