USE [PatPD1]
GO
/****** Object:  UserDefinedFunction [dbo].[fun_GetConditionInner]    Script Date: 2015/5/9 9:03:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER function [dbo].[fun_GetConditionInner] (@Product varchar(20))
  returns  varchar(8000)
AS
begin
   declare @ReturnValue varchar(8000)=''--用于拼接返回值
   declare @Status varchar(8000)--用于存储状态值
   declare @Type nvarchar(20)--EQPtype
   declare @TempType nvarchar(20)--EQPtype的临时变量用于比较
   declare @temp table(
      Status nvarchar(20),
      Type nvarchar(20)
   )
    -- declare @Product nvarchar(20)--EQPtype -- 测试放开
                                   -- set @Product='8701BA'
                                   -- set @Product='8725AA-0030A'
      insert into @temp select b.Status,a.Type from [dbo].[MtfSetting] a join [dbo].[MtfDetailSetting] b on a.Id=b.Id and a.Product =@Product
  --申明游标 为EquipmentID,FixQty
declare MTF_Cursor CURSOR FOR select Status,Type from @temp  
--打开游标

open MTF_Cursor
      fetch next from MTF_Cursor into @Status,@Type --将游标向下移1行,获取的数据放入之前定义的变量@Status,@JoinCalculate中

while  @@FETCH_STATUS = 0 --返回 FETCH 执行语句时游标的状态(1:fetch获取数据成功 -1:fetch语句失败或此行不在结果集中 -2:被提取的行不存在)  
   begin   
        if(@TempType!=@Type)--动态拼接投入数
             begin
                set @ReturnValue+='
                sum(CASE WHEN EQPTYPE='''+RTrim(@TempType)+''' THEN QUANTITY ELSE 0 END)  qty_TOTAL_'+Replace(@TempType,' ','')+','
             end

set @ReturnValue+='
                            sum(case when a.STATUS='''+RTrim(@Status)+''''--拼接条件头部

if((select count(*) from [dbo].[MtfSetting]where Product=@Product)>1 )--属于多种type的组合方式,多拼接一个 a.EQPTYPE 的条件
             begin
               set @ReturnValue+=' and a.EQPTYPE='''+RTrim(@Type)+''''
              end

set @ReturnValue+=' then QUANTITY else 0 end) qty_'+RTrim(@Status)+'_'+Replace(@Type,' ','')+','--拼接条件尾部
        set @TempType=@Type--赋值给临时存储变量
       fetch next from MTF_Cursor into @Status,@Type --将游标向下移1行
   end
close MTF_Cursor--关闭游标  
deallocate MTF_Cursor--释放游标

if((select count(*) from [dbo].[MtfSetting]where Product=@Product)>1 )--属于多种type的组合方式
   begin
     set @ReturnValue+='
                sum(CASE WHEN EQPTYPE='''+RTrim(@TempType)+''' THEN QUANTITY ELSE 0 END)  qty_TOTAL_'+Replace(@TempType,' ','')
   end
   else
   begin
   set @ReturnValue+='
                sum(QUANTITY)  qty_TOTAL_'+Replace(@TempType,' ','')
   end
--print @ReturnValue
  return @ReturnValue
 
end

sqlServer游标的使用的更多相关文章

  1. Sqlserver游标复习

    经常写存储过程,但今天在游标使用过程中还是疏忽了一些事情,执行过程中一直执行不下去,后来直接sqlserver挂了,教训啊! 代码虽简单,望铭记: Create PROCEDURE [dbo].[te ...

  2. SqlServer游标的创建与使用

    前言 大家都对SqlServer视图.存储过程.触发器的创建与使用有一定的了解了,我们来看下什么是游标,怎么使用,什么时候用. SqlServer视图的创建与使用 SqlServer存储过程的创建与使 ...

  3. sqlserver 游标的使用

    declare @temp_temp uniqueidentifier--临时变量 DECLARE aaa CURSOR for select Id from A ------------------ ...

  4. SqlServer游标简介

    游标实例:             Declare MyCusror Cursor Scroll For Select * From Master_Goods Order By GoodsID Ope ...

  5. sqlserver 游标

    DECLARE ChangeInvCodeCursor CURSOR FOR SELECT A.name AS tablecolumn,C.name AS tablename FROM sys.col ...

  6. SQLServer游标(Cursor) (B)

    游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力.我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许 ...

  7. SQLServer 游标 (A)

    游标 游标分为客户端游标和服务器端游标.Sql通过游标可以对一个结果集进行逐行处理.对于使用服务器端游标的过程有:声明.打开.读取.关闭.释放. 1 声明游标 1.1 SQL-92标准的声明 Decl ...

  8. SQLserver游标原理和使用方法

    在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句.但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录.那么如何解决这种问题呢 ...

  9. (转)sqlserver游标概念与实例全面解说

    首先声明:该文章转自http://www.cnblogs.com/wudiwushen/archive/2010/03/30/1700925.html  的博客 引言  我们先不讲游标的什么概念,步骤 ...

  10. SQLServer游标详解

    一.游标概念 我们知道,关系数据库所有的关系运算其实是集合与集合的运算,它的输入是集合输出同样是集合,有时需要对结果集逐行进行处理,这时就需要用到游标.我们对游标的使用一本遵循“五步法”:声明游标—& ...

随机推荐

  1. kali linux之手动漏洞挖掘一

    默认安装漏洞 phpmyadmin/setup默认安装 ubuntu/debian默认安装php5-cgi phpmyadmin/setup默认安装 使用?-d+allow_url_include%3 ...

  2. IO相关2(文件输入输出)

    除了继承自 iostream 类型的行为之外,fstream 中定义的类型还增加了一些新的成员来管理与流相关的文件.我们可以对 fstream,ifstream 和 ofstream 对象调用这些操作 ...

  3. 没有上司的舞会 树形dp

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  4. [JSOI2009]计数问题 二维树状数组BZOJ 1452

    题目描述 一个n*m的方格,初始时每个格子有一个整数权值.接下来每次有2种操作: 改变一个格子的权值: 求一个子矩阵中某种特定权值出现的个数. 输入输出格式 输入格式: 第一行有两个数N,M. 接下来 ...

  5. 三元运算符,i++(先用后加) ++i (先加后用)区别

    三元运算符是软件编程中的一个固定格式,语法是“条件表达式?表达式1:表达式2”.使用这个算法可以使调用数据时逐级筛选. 表达式:“()? :”. ()中进行二元运算 ?在运算,就形成三元运算符   i ...

  6. Android LayerDrawable资源应用

    1.介绍 (1)常识 (2)特点 2.实例演示 <1>新建drawable文件 app--->src---->main---->res---->drawable , ...

  7. Windows 安装Angular CLI

    1.安装nvm npm cnpm nrm(onenote笔记上有记录) 参考:https://blog.csdn.net/tyro_java/article/details/51232458 提示:如 ...

  8. bzoj1076 奖励关 期望dp

    题目传送门 题目大意:总共有k次弹出宝物的机会,宝物共有n种,弹出不同的宝物的概率相同的,是每个宝物都有价值,和选择这个宝物的限制(必须具有特定的宝物),问最后的最优期望是多少. 思路:“正向推概率, ...

  9. [转] 一文看懂npm、yarn、pnpm之间的区别

    [From] http://geek.csdn.net/news/detail/197339 原文:Understanding differences between npm, yarn and pn ...

  10. Oracle:DBMS_STATS.GATHER_TABLE_STATS的语法

    转自: http://cjjwzs.iteye.com/blog/1143893 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.G ...