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. ASP.NET 共用类库1

    using System; using System.Collections.Generic; using System.Text; using System.Web; using System.We ...

  2. 由于管理员设置的策略,该磁盘处于脱机状态-Win 2008 R2

    问题截图: 做了个小说网站www.114369.cn,使用的是云主机,系统是Win 2008 R2,进入服务器后发现磁盘有问题 只有c盘,没有d盘,提示:由于管理员设置的策略,该磁盘处于脱机状态 解决 ...

  3. 图形数据库、NOSQL和Neo4j

    简介 在众多不同的数据模型里,关系数据模型自80年代就处于统治地位,而且有不少实现,如Oracle.MySQL和MSSQL,它们也被称为关系数据库管理系统(RDBMS).然而,最近随着关系数据库使用案 ...

  4. Java [Leetcode 203]Remove Linked List Elements

    题目描述: Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> ...

  5. liux下ftp链接服务器的常用命令

    FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用 FTP,都会遇到大量的FTP内部命令.熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍 ...

  6. Android WindowManager 监听返回键及home键

    一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...

  7. 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];

    转自:http://blog.csdn.net/shandianling/article/details/8785269 问题描述:两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i ...

  8. bjfu1164 Parity Game

    简单规律题.首先想到的是,若01串中1有n个,则可以通过操作,使串中1的个数变为n-1.n-2……1.0个:第2个想到的是,如果n为奇数,可以通过操作,使串中1的个数最多变为n+1,而若n为偶数,则无 ...

  9. 【LeetCode 231】Power of Two

    Given an integer, write a function to determine if it is a power of two. 思路: 如果一个数是2的Power,那么该数的二进制串 ...

  10. Python--类使用

    类使用的几个注意点: 1. 类的语法结构:2. __init__(self),3. __metaclass__=type, (新式类)4. super(subclassname, self).__in ...