公司里实习写的一个存储过程,复习太多数SQL语句:)

 
set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go


--  =============================================
--
 Author:        <Author,,Name>
--
 Create date: <Create Date,,>
--
 Description:    <获取各车队申请用车情况,按车队分组(指定时间片内)>
--
 =============================================
ALTER   PROCEDURE   [ dbo ] . [ procReportCarNeedsAnalysisDept ]
@fromdate   DateTime ,
@todate   DateTime
AS
BEGIN
    
-- set nocount on;
     declare   @dID   varchar ( 50 ), @pID   varchar ( 50 ), @num   int
    
set   @num   =   0

    
-- 保存数据的临时表
     CREATE   TABLE   #me(TdID  varchar ( 50 ),TpID  varchar ( 50 ),Tname  varchar ( 50 ),Tnum  int ,TdepLevel  varchar ( 50 ))

    
-- 各部门用车统计 注意null不可操作,要转为0(使用函数isnull(value,0))
     insert   into  #me(TdID,TpID,Tname,Tnum,TdepLevel)
    
SELECT   d.departmentID,d.parentDepartID,d.departmentName,  isnull (tmp2.num, 0 ),d.departmentLevel
    
FROM          
    (
SELECT      deptID,  COUNT (deptID)  AS  num
        
FROM           
        (
SELECT      a.dispatchID, b.reqID, c.deptID
             
FROM      carDispatch  AS  a  INNER   JOIN
                  dr_Paral 
AS  b  ON  a.dispatchID  =  b.dispatchID  -- and dispatchDate between @fromdate and @todate
                  INNER   JOIN
                  carReq 
AS  c  ON  b.reqID  =  c.reqID
        )
        
AS  tmp1
    
GROUP   BY  deptID)  AS  tmp2 
        
RIGHT   OUTER   JOIN  uapDept  AS  d  ON  tmp2.deptID  =  d.departmentID
    
ORDER   BY
        d.departmentLevel 
desc

    
declare  curTest  cursor   for  (  select  TdID,TpID,Tnum  from  #me )
    
-- 按上级部门从低向上累加( 7-> 6->5 .... ->2)注意上一个表是按部门级别排序
     open  curTest
    
FETCH   NEXT   FROM  curTest  INTO   @dID , @pID , @num
    
while   @@FETCH_STATUS   =   0
    
Begin

        
update  #me  set  Tnum  =  Tnum  +   @num
        
where  TdID  =   @pID
        
FETCH   NEXT   FROM  curTest  INTO   @dID  , @pID , @num
    
End
    
close  CurTest
    
DEALLOCATE  CurTest

    
-- 显示4级部门名与用车数量
     Select  Tname,Tnum  from  #me  where  TdepLevel  =   4   and  TpID  =   6209

    
-- drop table #me
    


END


        公司里实习写的一个存储过程,复习太多数SQL语句:) 说起来也不复杂,只是不知道能否优化一下哈!!
用到了虚表,游标.

1.虚表里有一个用法 insert into 后可直接跟select集

2.isnull(name,defaultvalue),如果这个字段为null的话就付上默认值,因为null不用相加,所以一定要处理一下

3.用到游标肯定是有循环咯

4.right joint .. on ..匹配所有项,即使无数据也付上null值

5.程序是统计各部门用车数量,而每个部门又有子部门父部门,第个部门的用车数是本部门用车量加上所有子部门的用车量,所以要根据本部门的用车量;加到父部门里,从低级向高级加

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值