sql server 关于 数据汇总分析
来源:互联网 发布:枪神纪刷枪软件大全 编辑:程序博客网 时间:2024/05/29 09:15
CUBE 和 ROLLUP 之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
例子:
if object_id('a') is not null
drop table a
create table a
(
bm varchar(20), --编码
ck varchar(2), --仓库
sl int --数量
)
insert into a
select '01' ,'a', 6
union all
select '01','b',7
union all
select '02','a',8
union all
select '02','b',9
select * from a
(1)rollup 的用法 /* 01 a 6 */ (2)关于cuble的基本用法。 SELECT bm, ck, Sum(sl) as sl
SELECT bm, hj=
case when grouping(ck)=0
then
ck
else
bm+'合计'
end
, Sum(sl) as sl
FROM A
GROUP BY bm, ck WITH ROLLUP
01 b 7
01 01合计 13
02 a 8
02 b 9
02 02合计 17
NULL NULL 30
FROM A
GROUP BY bm,ck WITH cube
/*
01 a 6
01 b 7
01 NULL 13
02 a 8
02 b 9
02 NULL 17
NULL NULL 30
NULL a 14
NULL b 16
*/
(1) 不使用用rollup实现汇总的结果。
if object_id('ss') is not null
drop table ss
create table ss
(
gys varchar(10),
wlbm varchar(5),
jcsl int,
hgsl int
)
delete ss
insert into ss values('华南集团','001',500,500)
insert into ss values('华南集团','001',200,0)
insert into ss values('华南集团','001',100,100)
insert into ss values('华南集团','002',200,0)
insert into ss values('华南集团','002',100,100)
insert into ss values('江林集团','001',600,600)
insert into ss values('江林集团','001',200,0)
insert into ss values('花海斯通','002',200,200)
insert into ss values('花海斯通','002',100,0)
select 供应商,物料编号,检测批次总数,合格数量,pj as '平均' from
(
select sum(zs) as '检测批次总数',gys as '供应商','总计' as'物料编号' ,sum(hgsl) as '合格数量' ,
(cast(sum (hgsl) as float)/cast(sum(zs) as float)) as 'pj'
from
(select count(*) as 'zs' ,gys ,wlbm ,sum (case when hgsl=0 then 0 else 1 end) as 'hgsl' ,
(cast(sum (case when hgsl=0 then 0 else 1 end) as float)/cast(count(*) as float)) as 'pj'
from ss group by gys , wlbm) t group by gys
union all
select count(*) as 'zs' ,gys ,wlbm ,sum (case when hgsl=0 then 0 else 1 end) as 'hgsl' ,
(cast(sum (case when hgsl=0 then 0 else 1 end) as float)/cast(count(*) as float)) as 'pj'
from ss group by gys,wlbm) j order by CHARINDEX(left(供应商,2),'华南,江林,花海'),物料编号 asc
/*
华南集团 001 3 2 0.66666666666666663
华南集团 002 2 1 0.5
华南集团 总计 5 3 0.59999999999999998
江林集团 001 2 1 0.5
江林集团 总计 2 1 0.5
花海斯通 002 2 1 0.5
花海斯通 总计 2 1 0.5
*/
(2)通过 rollup实现数据汇总:
if object_id('[tb]') is not null
drop table [tb]
go
create table [tb]([供应商] varchar(8),[物料编码] varchar(10),[检验数量] int,[合格数量] int)
insert [tb]
select '华南集团','001',500,500 union all
select '华南集团','001',200,0 union all
select '华南集团','001',100,100 union all
select '华南集团','002',200,0 union all
select '华南集团','002',100,100 union all
select '江林集团','001',600,600 union all
select '江林集团','001',200,0 union all
select '花海斯通','002',200,200 union all
select '花海斯通','002',100,0
go
select
供应商=case when GROUPING(物料编码)=0 then 供应商 else 供应商+'合计' end,
物料编码=case when GROUPING(物料编码)=0 then 物料编码 else '' end,
检验批次总数=count(*),
合格批次总数=sum(case when 合格数量<>0 then 1 else 0 end),
比例=cast(sum(case when 合格数量<>0 then 1 else 0 end)*1.0/count(*)as dec(18,2))
from tb
group by 供应商,物料编码 with rollup
having GROUPING(供应商)=0
order by CHARINDEX(left(供应商,2),'华南,江林,花海')
供应商 物料编码 检验批次总数 合格批次总数 比例
------------ ---------- ----------- ----------- ---------------------------------------
华南集团 001 3 2 0.67
华南集团 002 2 1 0.50
华南集团合计 5 3 0.60
江林集团 001 2 1 0.50
江林集团合计 2 1 0.50
花海斯通 002 2 1 0.50
花海斯通合计 2 1 0.50
- sql server 关于 数据汇总分析
- sql server 关于 数据汇总分析
- SQL Server数据汇总完全解析
- 关于SQL SERVER 数据拆分
- Oracle, SQL Server, My SQL数据分页查询语句汇总
- 17、SQL Server 汇总数据之计算总计数据
- 关于sql server自动生成数据
- 关于ACCESS数据转为SQL SERVER数据表
- 关于sql server 删除重复数据
- sql server 关于表数据的插入
- sql server关于查询数据去重
- 关于SQL Server事务日志的问题汇总
- 关于SQL Server事务日志的问题汇总
- 关于SQL Server事务日志的问题汇总
- 关于SQL Server事务日志的问题汇总
- 关于SQL Server事务日志的问题汇总
- 关于SQL Server事务日志的问题汇总
- 关于SQL Server事务日志的问题汇总
- 自己扩展TinyMCE的上传附件插件
- vc常见问题
- linux系统下文件的上传与下载命令
- js 验证表单代码
- java编码2
- sql server 关于 数据汇总分析
- Table内容换行,省略方法.
- bookmarks in VIM
- AutoComplete实现关键字提示
- 请勿误读中国的善意
- Windows mobile UI
- struts2 derby paging 分页
- Foxmail的IMAP很好用
- moto a1200 gps