首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql单表汇总解决思路

2012-04-07 
sql单表汇总销量表产品编号 用户区间数量品牌 包装类型100001300020120311.00BudBBT100002300020120311.00

sql单表汇总
销量表
产品编号 用户 区间 数量 品牌 包装类型
100001300020120311.00 Bud BBT
100002300020120311.00 Bud SBT
100002300020120311.00 Bud SBT
100003300020120311.00 Bud CAN
100004300020120311.00 Bud OTH
100005300020120311.00 Htb OTH

如何用Sql得到如下结果

Total 66(汇总所有的信息)
  BBT 11(汇总BBT的信息)
  SBT 22
  CAN 11
  OTH 22
Bud 55(汇总所有的Bud)
  BBT 11(汇总所有Bud的BBT)包装类型不固定
  SBT 22
  CAN 11
  OTH 11
Htb 11(汇总所有的Htb)
  OTH 11(汇总所有的Htb的Oth)

[解决办法]

SQL code
create table 销量表(产品编号 int, 用户 int, 区间 varchar(6), 数量 int, 品牌 varchar(5), 包装类型 varchar(5))insert into 销量表select 100001, 3000, '201203', 11.00, 'Bud', 'BBT' union allselect 100002, 3000, '201203', 11.00, 'Bud', 'SBT' union allselect 100002, 3000, '201203', 11.00, 'Bud', 'SBT' union allselect 100003, 3000, '201203', 11.00, 'Bud', 'CAN' union allselect 100004, 3000, '201203', 11.00, 'Bud', 'OTH' union allselect 100005, 3000, '201203', 11.00, 'Htb', 'OTH'select * into #tfrom(select 品牌,'' 包装类型,sum(数量) '数量'from 销量表 group by 品牌union allselect 品牌,包装类型,sum(数量) '数量'from 销量表 group by 品牌,包装类型) t order by t.品牌select 'Total' 品牌,'' 包装类型,sum(数量) 数量 from 销量表union allselect '',包装类型,sum(数量) from 销量表 group by 包装类型union allselect * from #t 品牌   包装类型  数量----- ----- ----------- Total          66        BBT     11        CAN     11        OTH     22        SBT     22 Bud            55 Bud    BBT     11 Bud    CAN     11 Bud    OTH     11 Bud    SBT     22 Htb            11 Htb    OTH     11(12 row(s) affected)
[解决办法]
SQL code
create table 销量表(产品编号 int, 用户 int, 区间 varchar(6), 数量 int, 品牌 varchar(5), 包装类型 varchar(5))insert into 销量表select 100001, 3000, '201203', 11.00, 'Bud', 'BBT' union allselect 100002, 3000, '201203', 11.00, 'Bud', 'SBT' union allselect 100002, 3000, '201203', 11.00, 'Bud', 'SBT' union allselect 100003, 3000, '201203', 11.00, 'Bud', 'CAN' union allselect 100004, 3000, '201203', 11.00, 'Bud', 'OTH' union allselect 100005, 3000, '201203', 11.00, 'Htb', 'OTH'select case when t.包装类型='' then t.品牌 else '' end '品牌',t.包装类型,t.数量 into #t from(select 品牌,'' 包装类型,sum(数量) '数量'from 销量表 group by 品牌union allselect 品牌,包装类型,sum(数量) '数量'from 销量表 group by 品牌,包装类型) t order by t.品牌select 'Total' 品牌,'' 包装类型,sum(数量) 数量 from 销量表union allselect '',包装类型,sum(数量) from 销量表 group by 包装类型union allselect * from #t 品牌   包装类型  数量----- ----- ----------- Total         66        BBT    11        CAN    11        OTH    22        SBT    22 Bud           55        BBT    11        CAN    11        OTH    11        SBT    22 Htb           11        OTH    11(12 row(s) affected)
[解决办法]
SQL code
create table tb(产品编号 varchar(10),用户 varchar(10),区间 varchar(10),数量 decimal(18,2) ,品牌 varchar(10),包装类型 varchar(10))insert into tb values('100001', '3000', '201203', 11.00 ,'Bud', 'BBT')insert into tb values('100002', '3000', '201203', 11.00 ,'Bud', 'SBT')insert into tb values('100002', '3000', '201203', 11.00 ,'Bud', 'SBT')insert into tb values('100003', '3000', '201203', 11.00 ,'Bud', 'CAN')insert into tb values('100004', '3000', '201203', 11.00 ,'Bud', 'OTH')insert into tb values('100005', '3000', '201203', 11.00 ,'Htb', 'OTH')go--select 'Total' c1, 'total' c2 , sum(数量) c3 from tbselect * from (select 'Total' c1,包装类型 c2, sum(数量) c3 from tb group by 包装类型union allselect isnull(品牌,'Total') c1, isnull(包装类型,'合计') c2 , sum(数量) c3 from tb group by 品牌 , 包装类型 with rollup) torder by case when c1 = 'total' then 1 else 2 end , c1 , (case when c2 = '合计' then 1 else 2 end) drop table tb/*c1         c2         c3                                       ---------- ---------- ---------------------------------------- Total      合计         66.00Total      BBT        11.00Total      CAN        11.00Total      OTH        22.00Total      SBT        22.00Bud        合计         55.00Bud        BBT        11.00Bud        CAN        11.00Bud        OTH        11.00Bud        SBT        22.00Htb        合计         11.00Htb        OTH        11.00(所影响的行数为 12 行)*/ 

热点排行