公司裡實習寫的一個預存程序,複習太多數SQL語句:)

來源:互聯網
上載者:User
 

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.程式是統計各部門用車數量,而每個部門又有子部門父部門,第個部門的用車數是本部門用車量加上所有子部門的用車量,所以要根據本部門的用車量;加到父部門裡,從低級向進階加

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.