USE [ChangHong_612]
GO
/****** Object: UserDefinedFunction [dbo].[FN_GetProdQty] Script Date: 10/08/2015 14:05:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/***********************************************
-- Author: lxf
-- Create date: 2012-12-08 10:25:00
-- Description: 求产品数
-- Module: Public
select dbo.FN_GetProdQty('2013112007','20131120070002','(CKZ1110-002)','P01',1.01,'2013-09-13 00:00','2013-09-13 23:59')
***********************************************/
ALTER FUNCTION [dbo].[FN_GetProdQty]
(
@MO varchar(20),
@DispatchNO varchar(50),
@ItemNO varchar(20),
@ProcCode varchar(20) = '',
@DispatchPrior float ,
@StartDate varchar(20),
@EndDate varchar(20)
)
RETURNS int
AS
BEGIN
DECLARE @OpenMouldNum int, --开模数
@StockNum int,
@RETURN int,
@charType char(1) --机器类型,1表示注塑机,2表示植毛机
set @OpenMouldNum= 0
select @charType=isnull(m.MachineClsId,'1')
from V_DispatchOrder d
join mes_machine m on d.MachineNO=m.MachineNO
where MO = @MO
and DispatchNO = @DispatchNO
and (@DispatchPrior = 0 or DispatchPrior = @DispatchPrior)
and ItemNo = @ItemNO
and (@ProcCode = '' or ProcCode = @ProcCode)
--结束时间大于当前时间,自动截断
if(@EndDate <> '')
begin
if(getdate()<convert(datetime,@EndDate))
begin
set @EndDate = convert(varchar(19),getdate(),121)
end
end

select @OpenMouldNum = dbo.FN_GetProdMoNum(@MO, @DispatchNO, @DispatchPrior, @StartDate, @EndDate, @ProcCode)

IF (@charType = '1')
BEGIN
SELECT @RETURN=@OpenMouldNum * isnull(do.SocketNum,0) --注塑机的数量等于开模数*模穴数
FROM V_DispatchOrder DO
WHERE DO.MO = @MO and DO.DispatchNO = @DispatchNO
and (@ProcCode = '' or ProcCode = @ProcCode)
and (@DispatchPrior = 0 or DispatchPrior = @DispatchPrior)
and DO.ItemNO = @ItemNO
END
ELSE IF (@charType = '2')
BEGIN
SELECT @RETURN=isnull(CAST(PM.FieldValue as int),0)*isnull(cast(PP.FieldValue as int),0)*@OpenMouldNum
FROM V_DispatchOrder DO
left JOIN dbo.MES_MachineExt PM ON DO.MachineNo = PM.MachineNo
left JOIN dbo.MES_ItemExt PP ON DO.ItemNO = PP.ItemNO
WHERE DO.MO = @MO and DO.DispatchNO =@DispatchNO
and (@ProcCode = '' or ProcCode = @ProcCode)
and (@DispatchPrior = 0 or DispatchPrior = @DispatchPrior)
and DO.ItemNO= @ItemNO
and PM.FieldName='GroupNum' and PP.FieldName='OutNum'
END
Else
BEGIN
SELECT @RETURN = @OpenMouldNum
END
if @RETURN is null set @RETURN=0
if @RETURN<=0 set @RETURN=0
RETURN @RETURN
END

------------------------------------------

USE [ChangHong_612]
GO
/****** Object: UserDefinedFunction [dbo].[FN_GetAdjustMachineQty] Script Date: 10/08/2015 14:50:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/***********************************************
--Author: lxf
--Create date:2012.12.14
--select dbo.FN_GetAdjustMachineQty('2014082203','20140822030001','1201154',1.01,'','','','P01')
--Description:取得调机时的产品数。
***********************************************/

ALTER function [dbo].[FN_GetAdjustMachineQty]
(
@MO varchar(100),
@DispatchNO varchar(100),
@ItemNO varchar(50),
@DispatchPrior float,
@BeginDate varchar(20),
@EndDate varchar(20),
@ClassType varchar(20) = '',
@ProcCode varchar(20) = ''
)
returns int
as
begin
declare @GoodQty int,@BadQty int
set @GoodQty=0
set @BadQty=0

if @BeginDate=''
set @BeginDate='1900-01-01 00:00:00'

if @EndDate=''
set @EndDate=GETDATE()

select @GoodQty = sum(isnull(GoodQty,0))
from(
select DispatchNo, ItemNO, GoodQty,
(select name from
(select Name,BeginTime,
case
when BeginTime>EndTime then Cast(CAST(SUBSTRING(endtime,1,2) as int)+24 as varchar)+':00'
else EndTime end
EndTime
from MES_BCDetail
)
b
where BeginTime<convert(char(5),a.StartDate,108) and EndTime >convert(char(5),a.StartDate,108)
)
as ClassType
from MES_AdjustMachine a
where DispatchNO = @DispatchNO and ItemNO = @ItemNO
and (@DispatchPrior = 0 or DispatchPrior = @DispatchPrior)
and (@ProcCode = '' or ProcCode = @ProcCode)
and (StartDate IS NOT NULL AND EndDate IS NOT NULL)
and (EndDate>=@BeginDate AND StartDate<=@EndDate)
) a
where @ClassType = '' or ClassType = @ClassType

select @BadQty = sum(isnull(BadQty,0))
from(
select DispatchNo, ItemNO, BadQty,
(select name from (select Name,BeginTime,case when BeginTime>EndTime then Cast(CAST(SUBSTRING(endtime,1,2) as int)+24 as varchar)+':00'
else EndTime end EndTime from MES_BCDetail ) b where BeginTime<convert(char(5),a.QcDate,108) and EndTime >convert(char(5),a.QcDate,108)) as ClassType
from MES_Qc a
where qctype in(44,36,25,26,24,47) and DispatchNO = @DispatchNO and ItemNO = @ItemNO
and (@DispatchPrior = 0 or DispatchPrior = @DispatchPrior)
and (@ProcCode = '' or ProcCode = @ProcCode)
and (QCDate>=@BeginDate AND QCDate<=@EndDate)
) a
where @ClassType = '' or ClassType = @ClassType

return isnull(@GoodQty,0)+isnull(@BadQty,0)
end

SQl函数的写法的更多相关文章

  1. Sql函数的三种写法

    以前复制的创建sql函数比较乱,现在将我自己项目中的三种sql函数做下对比,一目了然: (1)表值函数——方法一:直接创建临时表,并返回临时表.优点:函数体中间可以直接申明临时变量,并做各种逻辑处理, ...

  2. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  3. Sql函数笔记一、case when

    Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END   ...

  4. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

    花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...

  5. Oracle 中的sql函数以及分页

    SELECT LPAD(,'*.') "LPAD example" FROM DUAL; 1.分页查询 (1)方法一:使用  between  and 来实现分页 select * ...

  6. SQL函数说明大全

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  7. [转]字符型IP地址转换成数字IP的SQL函数

    使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助.      /**//*--调用示例       sele ...

  8. 常用的Sql 函数

    常用的Sql 函数 1: replace 函数,替换字符. 语法 replace (original-string, search-string, replace-string ) 第一个参数你的字符 ...

  9. (转)Javascript匿名函数的写法、传参、递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...

随机推荐

  1. 全球最受欢迎的十大Linux发行版(图)

    帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...

  2. HDU 4609 3-idiots (FFT-快速傅立叶变换)

    [题意]给定N个树枝,求从中取出三个可以围成三角形的概率 [思路] 2013多校训练第一场比赛1010题. 一开始就想到了O(n^2)枚举前两个树枝和的算法,赛后群里大牛说计算所有两个树枝和的情况可以 ...

  3. apache开源项目 -- Wicket

    [infoq] Apache Wicket是一个功能强大.基于组件的轻量级Web应用框架,能将展现和业务逻辑很好地分离开来.你能用它创建易于测试.调试和支持的高质量Web 2.0应用.假设其他团队交付 ...

  4. POJ 2159 Ancient Cipher

    题意:被题意杀了……orz……那个替换根本就不是ASCII码加几……就是随机的换成另一个字符…… 解法:只要统计每个字母的出现次数,然后把数组排序看相不相同就行了…… 代码: #include< ...

  5. Storm入门教程 第五章 一致性事务【转】

    Storm是一个分布式的流处理系统,利用anchor和ack机制保证所有tuple都被成功处理.如果tuple出错,则可以被重传,但是如何保证出错的tuple只被处理一次呢?Storm提供了一套事务性 ...

  6. Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出 ...

  7. python学习资源

    12岁的少年教你用Python做小游戏: http://blog.jobbole.com/46308/ python视频教程大全集: http://www.douban.com/group/topic ...

  8. 警惕javascript代码中的“</script>”!

    之前在写<博客园自定义博客侧边栏公告的过滤漏洞>的时候遇到了一个javascript代码报错“语法错误”的问题,一直不得以解决,感谢Arliang发现了并为我进行了耐心的解释,现整理如下: ...

  9. 3669 [Noi2014]魔法森林(LCT,最小生成树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3669 [题意] 给定一个无向图,求1-n的路径中最小的max{ai}+max{bi} ...

  10. bzoj 1458 士兵占领(最大流)

    [题意] n行m列,第i行必须放L[i],第j列必须放C[j],有障碍格,求满足条件至少需要放多少. [思路] 至少放多少等价于最多不放多少. 对行列分别建XY点,则连边(S,Xi,a)(Yi,T,b ...