Summarizing data by using the cursor accounting month using MERGE INTO achieve added or updated database

CREATE  PROCEDURE [dbo].[sys_btainC6]
AS
    Create Table #c6bx
    (

        bmid  varchar(100),    
        bm  varchar(100),    
        je  decimal(28,2),
        ssgs  varchar(300),
        kjnd  varchar(100),
        kjqj  varchar(100)
    )
    BEGIN
    DECLARE @bmid varchar(50) 
DECLARE @gs varchar(50) 
DECLARE @kjnd varchar(50) 
DECLARE @kjqj int 
DECLARE kjya CURSOR --定义游标
FOR (SELECT DISTINCT bmid,(jbcsj.dbo.fn_getgs (bmid)) gs,YEAR(bxrq) as kjnd, MONTH(bxrq)as kjqj FROM [c6].[dbo]. [ Cw_fybxcb ] A the INNER  the JOIN c6.dbo.cw_fybx B ON a.MainID = b.mainid left  the Join   c6.dbo.ModuleApproveFlag C ON a.mainid = c.ID WHERE  . 1 = . 1  and delflag = ' 0 '  and app_flag = ' . 1 '  and   fylx = ' Expense ' ) - a collection of isolated desired cursor into 
the oPEN kjya - open a cursor 
FETCH The NEXT  the FROM kjya the INTO  @bmid , @gs , @kjnd , @kjqj  - reading the first line of data 
the WHILE  @@ FETCH_STATUS  =  0 
    the BEGIN 
the INSERT  the INTO # c6bx
        the SELECT  the DISTINCT bmid, BM, SUM (JE) AS JE, (jbcsj. dbo.fn_getgs (bmid)) AS SSGS, @kjnd  AS kjnd, @kjqj  AS kjqj the FROM  [ C6 ] . [ the dbo ] . [ cw_fybxcb ]a INNER JOIN c6.dbo.cw_fybx b on a.MainID=b.mainid
left join  c6.dbo.ModuleApproveFlag c on a.mainid=c.id where 1=1 and DelFlag='0' and app_flag='1' and  fylx='费用类'
 and bxrq BETWEEN cast((@kjnd+'-'+cast((@kjqj-1) as VARCHAR(2))+ '-26') as date)  and  cast((@kjnd+'-'+cast(@kjqj as VARCHAR(2))+ '-25')as date) 
and bmid=@bmid
 and @gs is not null GROUP BY bm,bmid
        FETCH The NEXT  from kjya the INTO  @bmid , @gs , @kjnd , @kjqj - read the next row of data 
    the END 
the CLOSE kjya; - close the cursor 
the DEALLOCATE kjya; - releases the puck 
the MERGE the INTO  [ jbcsj ] . [ The dbo ] . [ BMB ] 
the USING ( the SELECT bmid, BM, JE, SSGS, kjnd, kjqj the FROM # c6bx) CC
 the ON (bmb.bmid = cc.bmid and bmb.ssgs = cc.ssgsand bmb.kjnd=cc.kjnd and bmb.kjqj=cc.kjqj) 
WHEN MATCHED THEN 
    UPDATE 
    SET bmb.je=cc.je
WHEN NOT MATCHED THEN 
    INSERT([bm], [je], [ssgs], [kjnd], [kjqj], [bmid]) VALUES (cc.bm,cc.je,cc.ssgs,cc.kjnd,cc.kjqj,cc.bmid);

    drop table #c6bx
END

 

MERGE INTO target table data source table USING ON (0 = 1) Usage

Guess you like

Origin www.cnblogs.com/lydg/p/11368748.html