declare @t table (日期 datetime,供应商 Nvarchar(30),物料 Nvarchar(30),数量 int,价格 int,金额 int)
insert @t
select '2006-1-1','aa','A',10,1,10
union all
select '2006-1-2','aa','B',10,1,10
union all
select '2006-1-2','bb','D',2,20,40
union all
select '2006-1-3','aa','C',10,2,20
union all
select '2006-1-4','aa','B',10,1,10
select case when type=1 then 排名 else null end as 排名,
供应商,物料,数量,金额
from (
select 排名=1+(select count(*) from (select 供应商,sum(金额) as 金额 from @t group by 供应商) as t
where 金额>(select sum(金额) from @t where 供应商=b.供应商)
),
null as 供应商,物料,sum(数量) as 数量,sum(金额) as 金额,type=2
from @t b group by 供应商,物料
union all
select 排名=1+(select count(*) from (select 供应商,sum(金额) as 金额 from @t group by 供应商) as t
where 金额>sum(a.金额)
),
供应商,null as 物料,null as 数量,sum(金额) as 金额,type=1
from @t a group by 供应商
union all
select 1+count(distinct 供应商) as 排名,N'总计' as 供应商,null as 物料,null as 数量,sum(金额) as 金额,type=3
from @t
) as x
order by x.排名*1,type,物料
--结果
排名 供应商 物料 数量 金额
----------- ------------------------------ ------------------------------ ----------- -----------
1 aa NULL NULL 50
NULL NULL A 10 10
NULL NULL B 20 20
NULL NULL C 10 20
2 bb NULL NULL 40
NULL NULL D 2 40
NULL 总计 NULL NULL 90
select case when type=1 then 排名 else null end as 排名,
供应商,物料,数量,金额
from (
select 排名=1+(select count(*) from (select 供应商,sum(金额) as 金额 from tablename group by 供应商) as t
where 金额>(select sum(金额) from tablename where 供应商=b.供应商)
),
null as 供应商,物料,sum(数量) as 数量,sum(金额) as 金额,type=2
from tablename b group by 供应商,物料
union all
select 排名=1+(select count(*) from (select 供应商,sum(金额) as 金额 from tablename group by 供应商) as t
where 金额>sum(a.金额)
),
供应商,null as 物料,null as 数量,sum(金额) as 金额,type=1
from tablename a group by 供应商
union all
select 1+count(distinct 供应商) as 排名,'总计' as 供应商,null as 物料,null as 数量,sum(金额) as 金额,type=3
from tablename
) as x
order by 排名,type,物料