Rank() over(partition ... 分组统计的实例
USE [NanFeng]
GO
/****** Object: StoredProcedure [dbo].[st_MES_RptMaterilSum] Script Date: 04/18/2016 14:21:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[st_MES_RptMaterilSum]
(
@StaCode varchar(50) = ''--工作中心
,@MachineNO varchar(50) = ''--机器编号
,@BeginTime VARCHAR(19)='' --开始时间
,@EndTime VARCHAR(19)='' --结束时间
,@in_pagesize int = 20 --每页数量
,@in_page int = 1 --页数
,@out_total_rows int = 1 output --总数量
)
/*************
exec st_MES_RptMaterilSum '','','','',20,1,1
creator: Lindh
create date: 2014.05.15
Remark: 查询投料信息报表
**************/
as
begin
if object_ID('tempdb..#MaterialSUM') is not null drop table #MaterialSUM
--查询投料信息主表
select Id=IDENTITY(int),ProductDate,MachineNO,StaCode,MaterialNO,MaterialName,BeforeBalance,NeedQty,RealDemandQty,RealUseQty,Balance,1 Flag
into #MaterialSUM
from MES_MaterialSUM ml
where (@MachineNO='' or ml.MachineNO LIKE '%' + @MachineNO+'%')
and (@StaCode = '' or ml.StaCode in(select StaCode from dbo.FN_GetStaCode(@StaCode)))
and (@BeginTime='' or ml.ProductDate>=@BeginTime)
and (@EndTime='' or ml.ProductDate<=@EndTime)
order by ml.ProductDate,MachineNo,MaterialNO
select '1.0'
select * from #MaterialSUM
select '1.01'
select id,ProductDate, MachineNO,MaterialNO,NeedQty,RealDemandQty,RealUseQty,Balance,
Rank() over(partition by MachineNO+MaterialNO order by id) Groups
from #MaterialSUM
select '2.0 小计数据'
select max(ProductDate),MachineNO,MaterialNO,sum(isnull(NeedQty,0)),sum(isnull(RealDemandQty,0)),sum(isnull(RealUseQty,0)),max(id),2
from
(select id,ProductDate, MachineNO,MaterialNO,NeedQty,RealDemandQty,RealUseQty,Balance,
Rank() over(partition by MachineNO+MaterialNO order by id) Groups from #MaterialSUM
) a
group by MachineNO,MaterialNO,id-Groups
insert into #MaterialSUM(ProductDate,MachineNO,MaterialNO,NeedQty,RealDemandQty,RealUseQty,Balance,flag)
select max(ProductDate),MachineNO,MaterialNO,sum(isnull(NeedQty,0)),sum(isnull(RealDemandQty,0)),sum(isnull(RealUseQty,0)),max(id),2
from
(select id,ProductDate, MachineNO,MaterialNO,NeedQty,RealDemandQty,RealUseQty,Balance,
Rank() over(partition by MachineNO+MaterialNO order by id) Groups from #MaterialSUM
) a
group by MachineNO,MaterialNO,id-Groups
--更新小计的结余数量为最后一条记录的结余数
update b set b.Balance=isnull(a.Balance,0)
from #MaterialSUM a
join (select Balance from #MaterialSUM where flag=2)b
on a.id=Convert(int,b.Balance)
select '3.0小计'
select * from #MaterialSUM a
insert into #MaterialSUM(ProductDate,MaterialNO,MachineNO,NeedQty,RealDemandQty,RealUseQty,Balance,Flag)
select max(ProductDate),max(MaterialNO),MachineNO,sum(isnull(NeedQty,0)),sum(isnull(RealDemandQty,0)),sum(isnull(RealUseQty,0)),max(id),3
from #MaterialSUM where flag=2
group by MachineNO
--更新合计的结余数量为最后一条记录的结余数
update b set b.Balance=isnull(a.Balance,0) from #MaterialSUM a join (select Balance from #MaterialSUM where flag=3)b on a.id=Convert(int,b.Balance)
select '4.0 合计'
select * from #MaterialSUM a
insert into #MaterialSUM(ProductDate,MaterialNO,MachineNO,NeedQty,RealDemandQty,RealUseQty,Balance,Flag)
select max(ProductDate),max(MaterialNO),max(MachineNO),sum(isnull(NeedQty,0)),sum(isnull(RealDemandQty,0)),sum(isnull(RealUseQty,0)),max(id),4
from #MaterialSUM where flag=3
--更新总计的结余数量为最后一条记录的结余数
update b set b.Balance=isnull(a.Balance,0) from #MaterialSUM a join (select Balance from #MaterialSUM where flag=4)b on a.id=Convert(int,b.Balance)
select '5.0总计'
select * from #MaterialSUM a
--/* pages */
declare @row_from int, @row_to int
select @out_total_rows = count(*) from #MaterialSUM
execute st_MES_RS_Pages @out_total_rows, @in_pagesize, @in_page, @row_from output, @row_to output
----ouput
select Id,ProductDate,MachineNO,StaCode,MaterialNO,MaterialName,BeforeBalance,NeedQty,RealDemandQty,RealUseQty,Balance,Flag into #MaterialSUM2
from #MaterialSUM
where Id between @row_from and @row_to
order by MachineNO,ProductDate,MaterialNO,flag
select '结果'
select * from #MaterialSUM2
select Id,case when Flag=2 then '小计' when Flag=3 then '合计' when Flag=4 then '总计' else ProductDate end ProductDate,
case when Flag=3 or Flag=2 or Flag=4 then '' else MachineNO end MachineNO,StaCode,
case when Flag=3 or Flag=2 or Flag=4 then '' else MaterialNO end MaterialNO,MaterialName,
BeforeBalance,NeedQty,RealDemandQty,RealUseQty,Balance
from #MaterialSUM2
select @out_total_rows
end
---------------------------------------------------------测试的数据表生成:
if exists (select * from sysobjects where id = OBJECT_ID('[MES_MaterialSUM]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [MES_MaterialSUM]
CREATE TABLE [MES_MaterialSUM] (
[ID] [int] IDENTITY (1, 1) NOT NULL,
[ProductDate] [varchar] (10) NULL,
[MachineNO] [varchar] (50) NULL,
[MaterialNO] [varchar] (50) NULL,
[BeforeBalance] [decimal] (10,2) NULL,
[NeedQty] [decimal] (10,2) NULL,
[DemandQty] [decimal] (10,2) NULL,
[RealDemandQty] [decimal] (10,2) NULL,
[RealUseQty] [decimal] (10,2) NULL,
[Balance] [decimal] (10,2) NULL,
[StaCode] [varchar] (50) NULL,
[ItemNO] [varchar] (1000) NULL,
[IsEidtRdQty] [bit] NULL DEFAULT (0),
[CreateTime] [datetime] NULL DEFAULT (getdate()),
[UpdateMan] [varchar] (20) NULL,
[UpdateTime] [datetime] NULL,
[ProductFrom] [varchar] (19) NULL,
[ProductTo] [varchar] (19) NULL,
[ItemNameList] [varchar] (8000) NULL,
[MaterialName] [varchar] (8000) NULL)
ALTER TABLE [MES_MaterialSUM] WITH NOCHECK ADD CONSTRAINT [PK_MES_MaterialSUM] PRIMARY KEY NONCLUSTERED ( [ID] )
SET IDENTITY_INSERT [MES_MaterialSUM] ON
INSERT [MES_MaterialSUM] ([ID],[ProductDate],[MachineNO],[MaterialNO],[BeforeBalance],[RealDemandQty],[RealUseQty],[Balance],[StaCode],[IsEidtRdQty],[CreateTime],[ProductFrom],[ProductTo],[MaterialName]) VALUES ( 25,N'2014-12-22',N'NF8-205#',N'110000006',0.00,300.00,1968.33,-1668.33,N'1F10-18',0,N'2014-12-22 17:34:10',N'2014-12-22 08:00:00',N'2014-12-23 07:59:59',N'JTS01004-WH-FC')
INSERT [MES_MaterialSUM] ([ID],[ProductDate],[MachineNO],[MaterialNO],[BeforeBalance],[NeedQty],[RealDemandQty],[RealUseQty],[Balance],[StaCode],[IsEidtRdQty],[CreateTime],[ProductFrom],[ProductTo],[MaterialName]) VALUES ( 26,N'2014-12-22',N'NF8-205#',N'110190004',0.00,300.00,40.00,273.16,-233.16,N'1F10-18',0,N'2014-12-22 17:34:10',N'2014-12-22 08:00:00',N'2014-12-23 07:59:59',N'JTS01004-WH-FC')
INSERT [MES_MaterialSUM] ([ID],[ProductDate],[MachineNO],[MaterialNO],[BeforeBalance],[RealUseQty],[StaCode],[IsEidtRdQty],[CreateTime],[ProductFrom],[ProductTo],[MaterialName]) VALUES ( 31,N'2014-12-23',N'NF8-205#',N'110000006',0.00,1720.88,N'1F10-18',0,N'2014-12-24 10:02:24',N'2014-12-23 08:00:00',N'2014-12-24 07:59:59',N'JTS01004-WH-FC')
INSERT [MES_MaterialSUM] ([ID],[ProductDate],[MachineNO],[MaterialNO],[BeforeBalance],[RealUseQty],[StaCode],[IsEidtRdQty],[CreateTime],[ProductFrom],[ProductTo],[MaterialName]) VALUES ( 32,N'2014-12-24',N'NF8-205#',N'110000006',0.00,1368.99,N'1F10-18',0,N'2014-12-26 10:33:27',N'2014-12-24 08:00:00',N'2014-12-25 07:59:59',N'JTS01004-WH-FC')
INSERT [MES_MaterialSUM] ([ID],[ProductDate],[MachineNO],[MaterialNO],[BeforeBalance],[RealDemandQty],[RealUseQty],[Balance],[StaCode],[IsEidtRdQty],[CreateTime],[ProductFrom],[ProductTo],[MaterialName]) VALUES ( 33,N'2014-12-24',N'TS-160',N'110010001',0.00,1300.00,327.79,972.21,N'1F01-09',0,N'2014-12-26 10:33:27',N'2014-12-24 08:00:00',N'2014-12-25 07:59:59',N'yuliao')
INSERT [MES_MaterialSUM] ([ID],[ProductDate],[MachineNO],[MaterialNO],[BeforeBalance],[RealUseQty],[StaCode],[IsEidtRdQty],[CreateTime],[ProductFrom],[ProductTo],[MaterialName]) VALUES ( 34,N'2014-12-25',N'TS-160',N'110010001',972.21,126.94,N'1F01-09',0,N'2014-12-26 10:33:33',N'2014-12-25 08:00:00',N'2014-12-26 07:59:59',N'yuliao')
SET IDENTITY_INSERT [MES_MaterialSUM] OFF
---------------------------------------------------结果显示在MES_MaterialSUM_02.jpg与MES_MaterialSUM_01.jpg:在百度云MES里面的
Rank() over(partition ... 分组统计的实例的更多相关文章
- 010.简单查询、分组统计查询、多表连接查询(sql实例)
-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...
- Oracle按不同时间分组统计
Oracle按不同时间分组统计 Oracle按不同时间分组统计的sql 如下表table1: 日期(exportDate) 数量(amount) -------------- ----------- ...
- sqlserver分组统计合并
---分组partition by;统计:Count();合并:for xml path('') with cte as( select COUNT(t2.Id) OVER(PARTITION BY ...
- 分分钟搞懂rank() over(partition by)的使用
一.rank() over(partition by ...order by) 解释:partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组. 二.语法:ROW_NUM ...
- rank over partition by
高级函数,分组排序 over: 在什么条件之上. partition by e.deptno: 按部门编号划分(分区). order by e.sal desc: 按工资从高到低排序(使用rank() ...
- oracle row_number() over(partition by .. order by ..)和rank() over(partition by .. order by ..) 和dense_rank() over(partition by .. order by ..)的相似点与区别
新建一个测试表 create table dim_ia_test2(device_number varchar2(20),desc2 varchar2(20)) 插入数据后得到: 一.oracle r ...
- PHP+MySQL实现对一段时间内每天数据统计优化操作实例
http://www.jb51.net/article/136685.htm 这篇文章主要介绍了PHP+MySQL实现对一段时间内每天数据统计优化操作,结合具体实例形式分析了php针对mysql查询统 ...
- Python3-sqlalchemy-orm 分组统计
#-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
随机推荐
- (六)6.16 Neurons Networks linear decoders and its implements
Sparse AutoEncoder是一个三层结构的网络,分别为输入输出与隐层,前边自编码器的描述可知,神经网络中的神经元都采用相同的激励函数,Linear Decoders 修改了自编码器的定义,对 ...
- (六)6.13 Neurons Networks Implements of stack autoencoder
对于加深网络层数带来的问题,(gradient diffuse 局部最优等)可以使用逐层预训练(pre-training)的方法来避免 Stack-Autoencoder是一种逐层贪婪(Greedy ...
- swun 1612 合并果子
//思路:这题思路似乎很简单,每次取出最小的两个堆合并, //但是由于数据太大,不能采取每次进行排序的方式,所以 //想到用优先队列,以数据小的优先级更高为标准,但是 //优先队列中的数据默认情况 ...
- centreon load average 的含义
下面图是centreon监控到的 load 信息 其中的 load1,load5,load15 分别说明上一分钟.最后五分钟以及最后十五分钟的系统负载均值.它们的数字当然是越小越好.数字越高,说明服务 ...
- Linux基本命令 目录
Linux基本命令 目录 Linux基本命令(1)管理文件和目录的命令 Linux基本命令(2)有关磁盘控件的命令 Linux基本命令(3)文件备份和压缩的命令 Linux基本命令(4)有关关机和查看 ...
- Thread .join 的用法一例
在使用身份证读卡器时,要求 1. 身份证读到身份证 就 停止线程. 2. 关闭界面时会 自动停止调用读身份证的线程.这时候就需要用到 Thead.join 例子如下: Thread thread; p ...
- cocos2d-x CocoStudio中场景触发器(Trigger)的使用和扩展
场景编辑器中的触发器是一种通过事件触发机制,在特定的事件被触发的时候自动执行自己预先定义的动作或者功能. 编辑器中带有一些默认的事件.条件和动作,当然也可以扩展自定义的事件.条件和动作. 触发器可以创 ...
- strcpy基本用法
C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. C语言函数 原型声明:extern char *strcpy(char* dest, co ...
- configsections規範配置信息
對於小型項目,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易写错,这时,我们有几种解决方案 1 ...
- win7启动出现蓝屏STOP: 0X0000007B
解决方法:开机进BIOS,更改Interface Combination,即硬盘的接口种类,由默认的RAID改成了AHCI,保存,重启,一切正常. 事件过程: 今天开机进入win7,在start wi ...