一個Sql Server 的遊標與迴圈嵌套的預存程序用例

來源:互聯網
上載者:User

標籤:Sql Server   預存程序   遊標   

一個Sql Server 的遊標與迴圈嵌套的預存程序用例準備代碼
--建立表CREATE TABLE everyoneAVG(    ID int primary key identity(1,1),    AccNo INT,    AVGTime INT,    AddTimes INT);DROP TABLE everyoneAVG;SELECT ID,AccNo AS ‘使用者號‘,AVGTime/60 AS ‘平均儲值時間間隔(小時)‘,AddTimes AS ‘總儲值次數‘ FROM everyoneAVGORDER BY AVGTime/60 DESC;DELETE everyoneAVG;
功能需求

查詢出一個時間段內每個人的平均儲值時間間隔

實現代碼
CREATE PROCEDURE P_getAVGAddTimeASBEGINDECLARE    @AccountNo INT, --賬戶號    @AVGTime INT,   --每個人平均儲值間隔時間(分鐘)    @AddTimes INT,  --每個人總儲值次數(忽略十分鐘內的儲值)    @upConsumeTime DATETIME,    --前一次成交時間    @ConsumeTime DATETIME,  --當前成交時間    @TempTime INT   --臨時記錄累加的間隔時間(分鐘)    --聲明使用者號遊標    DECLARE allAcc_cursor CURSOR FOR    SELECT top 99.9999 percent AccountNo     FROM [CASH].[dbo].[tb_Customer]    ORDER BY AccountNo    OPEN allAcc_cursor  --開啟遊標    FETCH NEXT FROM allAcc_cursor   --擷取遊標下一行資料    INTO @AccountNo --使變數擷取當前遊標指定行的賬戶號    -----------外部遊標,ORDER BY AccountNo    WHILE(@@FETCH_STATUS=0)    BEGIN        SET @TempTime=0        SET @AVGTime=0  --每個人平均儲值時間賦初值        SET @AddTimes=0 --每個人儲值次數賦初值        SET @upConsumeTime=‘2017-11-09 00:00:00.000‘        DECLARE ConsumeTime_Cursor CURSOR FOR   --聲明成交時間        --儲值記錄查詢        SELECT top 99.9999 percent ConsumeTime         FROM [CASH].[dbo].[tb_inf]         WHERE [email protected] AND GrpNo=98 AND ExChgDate>=‘2017-11-09 00:00:00.000‘ AND ExChgDate<=‘2018-04-16 00:00:00.000‘        ORDER BY ConsumeTime        OPEN ConsumeTime_Cursor --開啟成交時間遊標        FETCH NEXT FROM ConsumeTime_Cursor --擷取下一行資料        INTO @ConsumeTime        WHILE(@@FETCH_STATUS=0)        BEGIN            --首次儲值處理            IF(@upConsumeTime=‘2017-11-09 00:00:00.000‘)            BEGIN                SET @[email protected]                SET @[email protected]+1            END            ELSE             IF(DATEDIFF(MINUTE,@upConsumeTime,@ConsumeTime)<10) ----十分鐘內的儲值時間忽略            BEGIN                SET @[email protected]            END            ELSE            BEGIN                SET @[email protected]+1   --儲值次數累加                SET @[email protected]+DATEDIFF(MINUTE,@upConsumeTime,@ConsumeTime)    --儲值時間間隔累加                SET @[email protected]            END        FETCH NEXT FROM ConsumeTime_Cursor --擷取下一行資料        INTO @ConsumeTime        END        --僅儲值一次或從未儲值        IF(@AddTimes=1)        BEGIN            SET @AVGTime=0        END        ELSE        BEGIN            SET @[email protected]/(@AddTimes-1)        END        --將得到的平均值存入暫存資料表        BEGIN            INSERT INTO [CASH].[dbo].[everyoneAVG]            VALUES(@AccountNo,@AVGTime,@AddTimes)        END        CLOSE ConsumeTime_Cursor    --關閉內部遊標        DEALLOCATE ConsumeTime_Cursor   --釋放內部遊標    FETCH NEXT FROM allAcc_cursor   --擷取遊標下一行資料    INTO @AccountNo --使變數擷取當前遊標指定行的賬戶號    END    CLOSE allAcc_cursor --關閉外部遊標    DEALLOCATE allAcc_cursor    --釋放外部遊標ENDGO

一個Sql Server 的遊標與迴圈嵌套的預存程序用例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.