游标+递归 查询 客户 子客户 查询财务信用

USE [CRM01]
GO
/****** Object:  StoredProcedure [dbo].[Account3YearsTrade]    Script Date: 07/15/2015 08:34:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Batch submitted through debugger: SQLQuery1.sql|7|0|C:\Users\crmqas2\AppData\Local\Temp\3\~vs3E13.sql
ALTER PROCEDURE  [dbo].[Account3YearsTrade] as
DECLARE @AccountId UNIQUEIDENTIFIER ,
    @yt_total_price money ,
    @OpportunityId UNIQUEIDENTIFIER ,
    @yt_invoice_date int ,
    @yt_lastyeartrading money ,
    @yt_toptwoannualturnover money ,
    @yt_topthreeannualturnover money ,
    @nowdate int
    --声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
DECLARE mycursor CURSOR
FOR
    select accountid from accountBase WHERE StateCode=0
    SELECT @nowdate=DATEPART(year,Getdate())
--打开游标
OPEN mycursor
    --从游标里取出数据赋值到我们刚才声明的2个变量中
FETCH NEXT FROM mycursor INTO @AccountId
    --判断游标的状态
    -- 0 fetch语句成功
    ---1 fetch语句失败或此行不在结果集中
    ---2 被提取的行不存在
	WHILE ( @@fetch_status = 0 )
		BEGIN
			set @yt_lastyeartrading = 0
			set @yt_toptwoannualturnover = 0
			set @yt_topthreeannualturnover = 0
			DECLARE mycursortwo CURSOR
			FOR
			  WITH childAccount(accountid,ParentAccountId) as
			   (
				SELECT accountid,ParentAccountId FROM AccountBase WHERE [email protected]
				UNION ALL
				SELECT A.accountid,A.ParentAccountId FROM AccountBase A,childAccount b
				where a.ParentAccountId = b.accountid
			   )
				select yt_total_price,DATEPART(year,yt_invoice_date),OpportunityId from Opportunity
				where yt_arrive in(SELECT accountid  from childAccount)   and yt_status=100000002
			    open mycursortwo
				FETCH NEXT FROM mycursortwo INTO @yt_total_price,@yt_invoice_date,@OpportunityId
				while( @@fetch_status = 0 )
					begin
						if(@[email protected])
							begin
								set @yt_lastyeartrading = @yt_lastyeartrading + isnull(@yt_total_price,0.0000)
							end
						else if(@[email protected])
							begin
								set @yt_toptwoannualturnover = @yt_toptwoannualturnover + isnull(@yt_total_price,0.0000)
							end
						else if(@[email protected])
							begin
								set @yt_topthreeannualturnover = @yt_topthreeannualturnover + isnull(@yt_total_price,0.0000)
							end
				FETCH NEXT FROM mycursortwo  INTO @yt_total_price,@yt_invoice_date,@OpportunityId
					end
		   CLOSE mycursortwo
		   DEALLOCATE mycursortwo
		   update Account
		   set yt_lastyeartrading = @yt_lastyeartrading,yt_lastyeartrading_Base = @yt_lastyeartrading,yt_toptwoannualturnover = @yt_toptwoannualturnover,
			   yt_toptwoannualturnover_Base = @yt_toptwoannualturnover,yt_topthreeannualturnover = @yt_topthreeannualturnover,yt_topthreeannualturnover_Base = @yt_topthreeannualturnover
		   where  AccountId = @AccountId

		   --用游标去取下一条客户
		   FETCH NEXT FROM mycursor  INTO @AccountId
		END
    --关闭游标
CLOSE mycursor
    --撤销游标
DEALLOCATE mycursor

  

时间: 2024-10-10 14:34:17

游标+递归 查询 客户 子客户 查询财务信用的相关文章

T100——q查询,子母查询(汇总——明细)练习笔记

范例: 原文地址:https://www.cnblogs.com/xiaoli9627/p/8920158.html

【JAVAEE学习笔记】hibernate04:查询种类、HQL、Criteria、查询优化和练习为客户列表增加查询条件

一.查询种类 1.oid查询-get 2.对象属性导航查询 3.HQL 4.Criteria 5.原生SQL 二.查询-HQL语法 //学习HQL语法 public class Demo { //基本语法 @Test public void fun1(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //--------------------------

【JAVAEE学习笔记】hibernate02:实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示

一.hibernate中的实体规则 实体类创建的注意事项 1.持久化类提供无参数构造 2.成员变量私有,提供共有get/set方法访问.需提供属性 3.持久化类中的属性,应尽量使用包装类型 4.持久化类需要提供oid.与数据库中的主键列对应 5.不要用final修饰class 主键类型 自然主键(少见) 表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用. 代理主键(常见) 表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义的列作为主键

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

多表查询,子查询,及查询语句中语句执行的先后顺序和特点

对多张表进行查询操作 查询方式1: 笛卡尔积查询 select * from 表1,表2; 结果:让表1中的每一条记录和表2中每一条记录一次组合 表1 n条记录 表2 m条记录 最终查询结果:n * m 条 注意: 1.观察笛卡尔积查询的最终结果,很多数据没有实际作用 2.查询结果太多,对内存压力大 笛卡尔积查询优化(内连接) 加上条件 隐式内连接 select * from 表1,表2 where 表1.字段 = 表2.字段; 显示内连接语法 select * from 表1 inner jo

SQL编程之高级查询(子查询)以及注意事项

1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命令的WHERE子句中.子查询是一个 SELECT 语句,它嵌套在一个 SELECT.SELECT...INTO 语句.INSERT...INTO 语句.DELETE 语句.或 UPDATE 语句或嵌套在另一子查询中. 语法:select ....from  表1  where  列1  > (子查询) 外面的查询成为父查询,圆括号嵌入的查询成为称

linq根据传入数据集合查询对应子级数据

工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 object obj = Caching.GetCache(CacheKey + UModel.RoleId); if (obj != null)//判读缓存数据是否null { SysFunList = (DataSet)obj; } else { string strSql = "select

#4 SQL 多表查询、子查询

今天讲了一个SQL的多表查询和子查询 笔记里面有挺多有用的图片,重要是为了方便了解外连接和内连接,还有自连接等... 这里显示不出来,所以放一个链接, 到有道云笔记去看:http://note.youdao.com/share/?id=90f107b6a6aac379a795373f7f98c6ff&type=note 多表查询和子查询的关系? 多表查询可以做到的,子查询都可以做到,子查询思路比较符合正常人的思路,但是代码稍微长一点 多表查询 |--内部链接查询 : select * from

单表查询、多表查询和子查询

查询语句: select SELECT-LIST from  TB where QYAKUDUCATION; 简单查询: select * from TB_NAME; select FIED1,FIED2 from TB_NAME; 投影 select [distinct] * from TB_NAME where QYAKUDUCATION;选择  #distinct重复的值只显示一次 from子句:要查询的关系   表,多个表,其他的select语句 where子句:指定布尔关系表达式, =