当前位置: 代码迷 >> Sql Server >> 求SQL语句(在等待.)解决方法
  详细解决方案

求SQL语句(在等待.)解决方法

热度:22   发布时间:2016-04-27 15:32:38.0
求SQL语句(在等待.....)

表结构及数据如下
名称         数据       单价       金额  
  a             b               c             d
a               c               d             f
小计         b+c     (c+d)/2         d+f
bc           d                   c           f
bc           c                   e           h
小计       d+c         (c+e)/2       f+h
总计       b+c+d+c                     d+f+f+h
请大家帮忙,
谢谢


------解决方案--------------------
select case [order] when 1 then 名称 when 2 then '小计 ' else '总计 'end,
数据,单价,金额
from
(
select *,1[order] from #
union all
select 名称,sum(数据),sum(单价),sum(金额),2 from # group by 名称
union all
select max(名称),sum(数据),sum(单价),sum(金额),3 from #
)a
order by 名称,[order]
------解决方案--------------------
create table tb (名称 varchar(10),数据 int,单价 int,金额 int)
insert into tb values( 'a ',2,2,4)
insert into tb values( 'a ',2,4,8)
insert into tb values( 'b ',3,3,9)
insert into tb values( 'b ',5,5,25.00)

select * from tb
union all
select 名称 = case when 名称 is null then '合计 ' else 名称 + '小计 ' end,sum(数据) 数据,avg(单价) 单价,sum(金额) 金额
from tb
group by 名称
with rollup
order by 名称
drop table tb

/*
名称 数据 单价 金额
-------------- ----------- ----------- -----------
a 2 2 4
a 2 4 8
a小计 4 3 12
b 3 3 9
b 5 5 25
b小计 8 4 34
合计 12 3 46

(所影响的行数为 7 行)
*/
------解决方案--------------------
create table #table(名称 varchar(10), 数据 int,单价 int,金额 int)
insert into #table select 'a ',1,2,4
insert into #table select 'b ',3,1,6
insert into #table select 'b ',11,1,7
insert into #table select 'a ',2,13,5

select case [order] when 1 then 名称 when 2 then '小计 ' else '总计 'end,
数据,单价,金额
from
(
select *,1[order] from #
union all
select 名称,sum(数据),sum(单价)/count(1),sum(金额),2 from # group by 名称
union all
select max(名称),sum(数据),sum(单价)/count(1),sum(金额),3 from #
)a
order by 名称,[order]

------解决方案--------------------
借數據一用

create table tb (名稱 varchar(10),數據 int,單價 int,金額 int)
insert into tb values( 'a ',2,2,4)
insert into tb values( 'a ',2,4,8)
insert into tb values( 'b ',3,3,9)
insert into tb values( 'b ',5,5,25.00)

select * from tb
order by 名稱
compute sum(數據),avg(單價),sum(金額) by 名稱
compute sum(數據),sum(金額)


名稱 數據 單價 金額
  相关解决方案