产品名称 规格 单位 数量 单价 金额 折扣率
90弯头 160 袋 52 2 104 0.3
立检口 160 袋 31 3 93 0.3
197
小计 0.3 59.1
立检口 50 袋 30 4 120 0.5
斜三通 110 袋 60 5 300 0.5
420
小计 0.5 210
总计173袋 59.1+210=269.1
90弯头 160 袋 52 2 104 0.3
立检口 160 袋 31 3 93 0.3
197
小计 0.3 59.1
立检口 50 袋 30 4 120 0.5
斜三通 110 袋 60 5 300 0.5
420
小计 0.5 210
总计173袋 59.1+210=269.1
产品名称,规格,单位,数量,单价,金额,
case when 排序=0 then 折扣率 else null end as 折扣率
from (
select 产品名称,规格,单位,数量,单价,金额,折扣率,cast(0 as int) as 排序
from 原表
union all
select null as 产品名称,null as 规格,null as 单位,null as 数量,null as 单价,sum(金额) as 金额,折扣率,1 as 排序
from 原表
group by 折扣率
union all
select '小计' as 产品名称,null as 规格,null as 单位,null as 数量,折扣率 as 单价,sum(金额)*折扣率 as 金额,折扣率,2 as 排序
from 原表
group by 折扣率
union all
select '总计'+cast(sum(数量) as varchar)+'袋' as 产品名称,null as 规格,null as 单位,null as 数量,null as 单价,sum(金额*折扣率) as 金额,max(折扣率) as 折扣率,3 as 排序
from 原表
) as t
order by t.折扣率,t.排序
declare @原表 table (
产品名称 nvarchar(50),
规格 varchar(20),
单位 nvarchar(10),
数量 int,
单价 numeric(10,2),
金额 numeric(10,2),
折扣率 numeric(10,2)
)
insert @原表 select
N'90弯头', '160', N'袋', 52, 2, 104, 0.3
union all select
N'立检口', '160', N'袋', 31, 3, 93,0.3
union all select
N'立检口', '50', N'袋', 30, 4, 120, 0.5
union all select
N'斜三通', '110', N'袋', 60, 5, 300, 0.5--查询
select
产品名称,规格,单位,数量,单价,金额,
case when 排序=0 then 折扣率 else null end as 折扣率
from (
select 产品名称,规格,单位,数量,单价,金额,折扣率,cast(0 as int) as 排序
from @原表
union all
select null as 产品名称,null as 规格,null as 单位,null as 数量,null as 单价,sum(金额) as 金额,折扣率,1 as 排序
from @原表
group by 折扣率
union all
select N'小计' as 产品名称,null as 规格,null as 单位,null as 数量,折扣率 as 单价,sum(金额)*折扣率 as 金额,折扣率,2 as 排序
from @原表
group by 折扣率
union all
select N'总计'+cast(sum(数量) as varchar)+'袋' as 产品名称,null as 规格,null as 单位,null as 数量,null as 单价,sum(金额*折扣率) as 金额,max(折扣率) as 折扣率,3 as 排序
from @原表
) as t
order by t.折扣率*1,t.排序--结果
产品名称 规格 单位 数量 单价 金额 折扣率
-------------------------------------------------- -------------------- ---------- ----------- --------------------------------------- --------------------------------------- ---------------------------------------
90弯头 160 袋 52 2.00 104.00 0.30
立检口 160 袋 31 3.00 93.00 0.30
NULL NULL NULL NULL NULL 197.00 NULL
小计 NULL NULL NULL 0.30 59.10 NULL
立检口 50 袋 30 4.00 120.00 0.50
斜三通 110 袋 60 5.00 300.00 0.50
NULL NULL NULL NULL NULL 420.00 NULL
小计 NULL NULL NULL 0.50 210.00 NULL
总计173袋 NULL NULL NULL NULL 269.10 NULL(9 行受影响)
数量统计一下就行了,不管是不是一样的计量单位