PCB MS SQL 排序应用---相邻数据且相同合并处理

这是一个很有趣SQL数据处理应用,具体需求如下

ERP需要工程将物料编码相邻的编码合并求和BOM用量,巧妙的用到了已有排序号与分组排序号之间的差值求解

示例:

原数据:

要求转换:

实际转换后数据:

SQL代码实现:

with tab1 as
(
select 1 as [Rank] ,1710 as OPERATION_CODE,3.621000 UNIT_TIME
UNION
select 2 as [Rank] ,1710 as OPERATION_CODE,3.621000 UNIT_TIME
UNION
select 3  as [Rank] ,1711 as OPERATION_CODE,3.333000 UNIT_TIME
UNION
select 4 as [Rank] ,1710 as OPERATION_CODE,0.288000 UNIT_TIME
UNION
select 5 as [Rank] ,1711 as OPERATION_CODE,0.288000 UNIT_TIME
UNION
select 6 as [Rank] ,1711 as OPERATION_CODE,3.333000 UNIT_TIME
)
SELECT * into #tab1 FROM tab1

SELECT * FROM #tab1

SELECT MAX([Rank]) [Rank],OPERATION_CODE,SUM(UNIT_TIME) UNIT_TIME
FROM
  (SELECT OPERATION_CODE,[Rank],UNIT_TIME,row_number()over(partition by OPERATION_CODE order by [Rank]) -[Rank] DiffVal
  FROM #tab1) a
GROUP BY OPERATION_CODE,DiffVal
ORDER BY MAX([Rank])

原文地址:https://www.cnblogs.com/pcbren/p/9270827.html

时间: 2024-10-30 22:41:09

PCB MS SQL 排序应用---相邻数据且相同合并处理的相关文章

PCB MS SQL 排序应用---SQL相邻数据区间值求解

其中一篇 博文中有写<PCB MS SQL 排序应用---相邻数据且相同合并处理>此篇有也应相用也同的技巧,实现相邻数据区间值求解 示例: 原数据:处理前 求出区间值:处理后 SQL 代码实现 DECLARE @table table(RowNo INT,FlowTechName VARCHAR(20)) INSERT INTO @table(RowNo,FlowTechName) VALUES(1,'沉铜') INSERT INTO @table(RowNo,FlowTechName) VA

MS SQL到Oracle的数据迁移笔记

MS SQL到Oracle的数据迁移笔记 一.任务背景 旧系统使用MS SQL Server数据库,新系统使用Oracle数据库,现在需要将旧系统中的数据迁移到新系统中,旧数据按照约定的规则转换后,能够在新系统中使用或查询.另外,新系统的实施人员并不清楚旧系统的数据结构,且两个新旧两个系统的使用的数据结构有较大的差异.为了叙述方便,将旧系统维护人员简称为A,新系统实施人员简称为B. 二.总体思路 1.  A与B根据各自了解的信息,一起制定中间表: 2.  A从MS SQL Server提取数据,

PCB MS SQL 标量函数(CLR) 实现Socket发送消息

在PCB业务系统中,数据库中的数据总是被应用端主动连接数据库并操作数据,是否想过可以让数据库主动的将数据推送出去呢! 答应其实是可以的.比如有这样的应用场景! 当SQL SERVER数据库满足某个条件时,可以让数据库主动的将消息发送出去! 例如:数据库中的某个字段的数据发生变化或客户端触发了某个存储过程时(必须有触发点或任务计划),这时数据库可以主动的将信息发送到其它业务系统或监控平台等系统.下面介绍SQL方式用Socket发送消息. 一.C#写SQL SERVER(CLR)实现Socket发送

PCB MS SQL 小写转大写

由于SQL Server允许为小写进入 ,导致数据库中存在小写,在数据集成到MES或ERP时报错,Oracle要求大写导致, 需转换为大写,可通过以下语句,查询所有小写数据,再更新. SELECT * FROM ppeflow WHERE pdctno LIKE '%[a-z]%' COLLATE chinese_prc_bin AND LEN(pdctno) = 10 update ppegeneral SET pdctno = UPPER(pdctno) WHERE pdctno LIKE

PCB MS SQL 行转列(动态拼SQL)

一.原数据: SELECT inman,indate FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate < '2016-6-1' ORDER BY indate 二.转换后(动态拼接SQL): --数据先存临时表 SELECT inman,indate INTO #tab FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate

PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)

将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5oz/2oz/3oz') 效果如下: SQL实现表值函数 CREATE FUNCTION [dbo].[splitStr]( @s varchar(max), --待分拆的字符串 @split varchar(10) --数据分隔符 )RETURNS @re TABLE(id int IDENTIT

PCB MS SQL SERVER 字段含小写字母更新为大写字母

今天在预审完成时报如下错误,此错误原因是由于SQL Server数据字段存在小写,而Oracle数据库需大写导致的, 怎么解决这个问题了,非常简单 .这里将SQL贴出来 . 1.将生产型号中含有小写字母的查出来--只过滤硬板,FPC不包含在内 --将生产型号中含有小写字母的查出来--只过滤硬板,FPC不包含在内 SELECT * FROM mktxhglb WHERE pdctno LIKE '%[a-z]%' COLLATE chinese_prc_bin AND LEN(pdctno) =

PCB MS SQL 标量函数(CLR) 实现转Json方法

一.准备需转为json的数据 在数据库中执行一段SQL返回的数据 需转换后的JSON字符串的效果 [{"TechName":"开料","ItemName":"综合利用率是否为最高","ItemPara":"/"},{"TechName":"开料","ItemName":"综合利用率","ItemPa

PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法

一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":"EC_01","id":"1"},{"TechName":"流程指示","TechNo":"PI_01","id":"2"},{"