多条单据,每个单据多条明细,循环时,判断出每个单据的开始

适用多条单据,每个单据多条明细,要对每个单据的明细,进行业务处理。循环数据,识别出每个单据的第一条明细。

--create table ABC
--(
--    A int,
--    B int,
--    C int
--)
--insert ABC select ‘1‘,‘20‘,null
--insert ABC select ‘1‘,‘10‘,null
--insert ABC select ‘2‘,‘15‘,null
--insert ABC select ‘2‘,‘5‘,null

if exists(select * from sysobjects where id=object_id(N‘tempdb..#ttt‘) )
drop table #ttt
DECLARE @sid INT,@sno INT,@preid int,@curid int,@ccid int,@ctotal int
select IDENTITY(int,1,1) as fid,* into #ttt from ABC order by A asc, B desc

SET @sno=@@rowcount
SET @sid=1
set @preid=0
set @ctotal=0
WHILE @sid<=@sno
BEGIN
select @curid=A from #ttt where fid=@sid
select @ccid=B from #ttt where fid=@sid
if @preid<>@curid
begin
set @ctotal=@ccid
set @preid=@curid
end
else
begin
set @ctotal=@ctotal-@ccid
end
update #ttt set c=@ctotal where fid=@sid
SET @sid=@sid+1
END
select * from #ttt
drop table #ttt
fid A B C
1 1 20 20
2 1 10 10
3 2 15 15
4 2 5 10
时间: 2024-10-10 14:09:25

多条单据,每个单据多条明细,循环时,判断出每个单据的开始的相关文章

mongo数据库中一条记录中某个属性是数组情形时 数据结构的定义

package entity; import java.util.Date; import com.mongodb.BasicDBList;import com.mongodb.DBObject; public class CommonEditEntity { /** 数据库中查询记录结果 */ private DBObject record; /** 数据库默认id */ private String _id; /** 项目id */ private String project_id; /*

[lua, mysql] 将多条记录数据组合成一条sql插入语句(for mysql)

-- 演示将多条记录数据组合成一条sql插入语句(for mysql) function getTpl0(tname) -- 获取表各个字段 local t = { tpl_pack = {"packId","itemId","`group`","num","rate","rateType"}, } for k, v in pairs(t) do if tname == k then r

MFC文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转

转自:http://blog.csdn.net/panshiqu/article/details/9369891# 将多个工具条同时并列停靠在某窗口的某一条边上.对于这种停靠方法,利用上述工具条控制函数DockControlBar的lpRect参数,通过控制工具条的停靠矩形区域的方法可以实现 1:在MainFrm.h中增加如下成员函数定义 // 增加 public: void DockControlBarLeftOf(CToolBar* bar, CToolBar* leftof); . 2:在

winform 加载窗体时弹出另一个窗体并显示进度条的源码

winform 加载窗体时弹出另一个窗体并显示进度条的源码 //frmA: 源窗体 //------------------------------------------ //引用 using System.Threading; BackgroundWorker worker; public frmA() { InitializeComponent(); worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandl

mysql 查询一条记录的下一条和上一条记录

如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from table_a where id = (select id from table_a where id < {$id} [and other_conditions] order by id desc limit 1) [and other_conditions]; 查询下一条记录的SQL语句(如果有其他的

如何将多条update语句合并为一条

需求: 如何将多条update语句合并为一条update语句:如,update table1 set col='2012' where id='2014001'      update table1 set col='1009' where id='2014003'如何合并为一条? 在网上找了好久,总结了一个相对简单的语句(有些语句是函数语句,有点晕),如下: update table1 set col=(case id when '2014001' then '2012' when '2014

缓冲进度条或加载进度条

缓冲进度条或加载进度条,在加载页面或者视频加载过程中,为了做到更好的UI及App功能体验交互,这些缓冲加载的等待效果是必不可少的: 下面来看一下旋转的动画效果:那么,他们的具体源码在这里:loading_1: <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" andro

sqlserver获取当前id的前一条数据和后一条数据

一.条件字段为数值的情况 select * from tb where [email protected]; --当前记录   select top 1 * from tb where id>@id order by id; --下一条记录   select top 1 * from tb where id<@id order by id desc --上一条记录 二.以排序的思路出发的一种方案 ;WITH TUsers AS (     SELECT *, ROW_NUMBER() OVER

C# 下载带进度条代码(普通进度条)

<span style="font-size:14px;"> </span><pre name="code" class="csharp"><span style="font-size:14px;"> /// <summary> /// 下载带进度条代码(普通进度条) /// </summary> /// <param name="URL&