一个复杂的SQL函数

CREATE FUNCTION Get_JX
(
  @DeptID varchar(50),
  @Xtlx   varchar(50)
)

RETURNS
@ResultTB Table
(
 Dxsid          [varchar](50),     --大学生id
 DxsName   [varchar](50),     --大学生姓名
 Gwid          [varchar](50),      --见习岗位id
 Jxtgf           [bit],            --见习通过否
 Status        [varchar](50),      --见习习异常状态()
 JXDays      [varchar](50),       --见习天数
 JHDays      [varchar](50),      --计划见习天数
 GwName    [varchar](50)        --岗位名称
)
AS
BEGIN

INSERT INTO @ResultTB

SELECT DISTINCT DXS.TableKey,DXS.姓名,bb.工作岗位id,DXS.通过见习否 ,CASE  WHEN JX.TableKey IS NULL THEN 100 WHEN ZS<30*JX.在岗时间 THEN 1 ELSE 0 END Status ,TJ.ZS,GWZD.在岗时间,GWZD.工作岗位
from
--筛选大学生信息
(
  SELECT  a.*,@Xtlx xtlx from view_大学生信息 a
  JOIN  [dbo].[Get_SubDept](@DeptID)  ON deptid=接收单位id    --按单位筛选
  Where a.有效否=1
) DXS  


LEFT join 系统必备岗位 BB  --连接必备岗位
on dxs.xtlx=bb.系统编码  

LEFT join  --连接见习表
(SELECT SJ.TableKey,SJ.见习岗位id,JH.大学生id DXSID,DATEDIFF(DAY,SJ.见习时间始,SJ.见习时间止) AS JXTS,SJ.在岗时间,SJ.工作岗位
FROM VIEW_实际见习情况 SJ INNER JOIN VIEW_见习计划 JH
ON SJ.见习计划id=JH.TableKey
) JX                        
ON bb.工作岗位id=JX.见习岗位id AND DXS.TableKey=JX.DXSID


LEFT JOIN   --连接每个人每种岗位的见习总时间`
(
SELECT DA.DXSID,DA.见习岗位id,SUM(DATEDIFF(DAY,DA.见习时间始,DA.见习时间止)) AS ZS FROM
(SELECT SJ.TableKey,SJ.见习岗位id,JH.大学生id DXSID,SJ.见习时间始,SJ.见习时间止 FROM VIEW_实际见习情况 SJ INNER JOIN VIEW_见习计划 JH
 ON SJ.见习计划id=JH.TableKey
) AS DA
group by DA.DXSID,DA.见习岗位id
) AS TJ
ON
DXS.TableKey= TJ.DXSID
AND
JX.见习岗位id=TJ.见习岗位id

LEFT JOIN  字典_工作岗位 AS GWZD

ON BB.工作岗位id=GWZD.TableKey

RETURN

END

 

 


因为TJ 里的总数是已经统计了同一岗位所有的实际见习时间的,在后台对一个人所有培养经历进行统计时会出现重复统计现象(可能在同个岗位有多次见习经历),所以加了

DISTINCT 进去,以后再要加字段进去不知道会不会出问题,都是摸着石头过河,唉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值