--存储

USE [JSD]

GO

/****** Object:  StoredProcedure [dbo].[UPDATEJSDMX]    Script Date: 03/12/2015 09:38:37 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER Procedure [dbo].[UPDATEJSDMX]

@YEARMONTH int

as

begin

declare @sql varchar(1000)

declare @YEARMONTH1 varchar(20)

declare @s nvarchar(4000)

set @YEARMONTH1=CAST(@YEARMONTH as Varchar(20))

if exists (select * from sysobjects where id=object_id(N'[KL]') and OBJECTPROPERTY(id,N'IsUserTable')=1)

drop table KL

set @sql='select J.JLBH,substring(I.DEPTID,1,4) DEPTID,convert(char,getdate(),102) RQ'+

+',W.NAME WLDW,S.NAME SPSB,I.JSKL,sum(I.XSJE+I.YHJE) XSJE '+

 +' from JXC.BFBHDD.JSD J,JXC.BFBHDD.JSDITEM I,JXC.BFBHDD.WLDW W,JXC.BFBHDD.SPSB S,JXC.BFBHDD.SPXX X'+

+' where J.JLBH=I.JLBH'+

  +' and J.YEARMONTH='+@YEARMONTH1

  +' and J.WLDW=W.CODE'+

  +' and I.SP_ID=X.SP_ID'+

  +' and X.SB=S.SBID'+

  +' and I.JSKL>=0'+

+' group by J.JLBH,substring(I.DEPTID,1,4),W.NAME,S.NAME,I.JSKL'

set @sql='select * into KL from openquery(MSybase,'''+@sql+''')'

--print(@sql)

exec(@sql)


if exists (select * from sysobjects where id=object_id(N'[KK]') and OBJECTPROPERTY(id,N'IsUserTable')=1)

drop table KK

set @sql='select J.JLBH,W.NAME WLDW,I.JSKKMC,I.JSKKJE'+

  +' from JXC.BFBHDD.JSD J,JXC.BFBHDD.JSDKKITEM I,JXC.BFBHDD.WLDW W'+

 +' where J.JLBH=I.JLBH'+

   +' and J.YEARMONTH='+@YEARMONTH1

   +' and J.WLDW=W.CODE'+

 +' group by J.JLBH,W.NAME,I.JSKKMC,I.JSKKJE'

set @sql='select * into KK from openquery(MSybase,'''+@sql+''')'

exec(@sql)


if exists (select * from sysobjects where id=object_id(N'[KP]') and OBJECTPROPERTY(id,N'IsUserTable')=1)

drop table KP

set @sql='select JLBH,sum(JSJE_17+ZZSJE_17+JSJE_QT) KPJE from JXC.BFBHDD.JSD where YEARMONTH='+@YEARMONTH1+' group by JLBH order by JLBH'

set @sql='select * into KP from openquery(MSybase,'''+@sql+''')'

exec(@sql)


if exists (select * from sysobjects where id=object_id(N'[KL_N]') and OBJECTPROPERTY(id,N'IsUserTable')=1)

drop table KL_N

select JLBH,DEPTID,WLDW,SPSB,KL=(stuff((select ';'+convert(varchar,JSKL)+ ';' + convert(varchar,XSJE) from KL where JLBH=a.JLBH for xml path('')),1,1,'')),HZJE=(select sum(XSJE) from KL where JLBH=a.JLBH) into KL_N from KL a group by JLBH,DEPTID,WLDW,SPSB


if exists (select * from sysobjects where id=object_id(N'[KK_N]') and OBJECTPROPERTY(id,N'IsUserTable')=1)

drop table KK_N

select @s=isnull(@s+',','')+quotename([JSKKMC]) from kk group by[JSKKMC]

exec('select [JLBH],[WLDW],'+@s+',[HJKK] into KK_N from (select *,[HJKK]=sum([JSKKJE]) over(partition by [JLBH],[WLDW]) from kk) a pivot (max([JSKKJE]) for [JSKKMC] in('+@s+'))b ')


if exists (select * from sysobjects where id=object_id(N'[JSD]') and OBJECTPROPERTY(id,N'IsUserTable')=1)

drop table JSD

select l.deptid,l.spsb,

dbo.split(l.KL,';',1) as kl1, dbo.split(l.kl,';',2) as xs1, 

dbo.split(l.kl,';',3) as kl2,dbo.split(l.kl,';',4) as XS2,

dbo.split(l.kl,';',5) as kl3,dbo.split(l.kl,';',6) as XS3,

dbo.split(l.kl,';',7) as kl4,dbo.split(l.kl,';',8) as XS4,

dbo.split(l.kl,';',9) as kl5,dbo.split(l.kl,';',10) as XS5,

dbo.split(l.kl,';',11) as kl6,dbo.split(l.kl,';',12) as XS6,

dbo.split(l.kl,';',13) as kl7,dbo.split(l.kl,';',14) as XS7,

l.HZJE,K.*,P.KPJE,P.KPJE-K.HJKK SJJE,HZJE-KPJE MLE,(HZJE-KPJE)/HZJE MLL,dbo.L2U(P.KPJE-K.HJKK,1) RMB into JSD

from  KL_N L,KK_N K,KP P

where L.JLBH=K.JLBH

  and L.JLBH=P.JLBH

end

--程序调用

exec updatejsdmx 201501

--使用到FUNCTION

USE [JSD]

GO

/****** Object:  UserDefinedFunction [dbo].[split]    Script Date: 03/12/2015 15:56:50 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER function [dbo].[split](

@srcstr varchar(4000),

@space varchar(50),

@showindex int

)returns varchar(4000)

begin

declare @pos1 int

declare @pos2 int

declare @index int

declare @return varchar(4000)

set @pos1 = 0

set @pos2 = 0

set @index = 0

set @srcstr = @srcstr + @space

while @index<@showindex

begin

set @pos1 = @pos2

set @pos2 = charindex(@space,@srcstr,@pos1+1)

if @pos2-@pos1-1>0

set @return = substring(@srcstr,@pos1+1,@pos2-@pos1-1)

else

begin

set @pos2 = len(@srcstr)

set @return = ''

end

set @index = @index + 1

end

return(@return)

end

----------------------------------

USE [JSD]

GO

/****** Object:  UserDefinedFunction [dbo].[L2U]    Script Date: 03/12/2015 15:57:12 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO


ALTER FUNCTION [dbo].[L2U](@n_LowerMoney numeric(15,2),@v_TransType int) 

RETURNS VARCHAR(200) AS 

BEGIN 

Declare @v_LowerStr VARCHAR(200) -- 小写金额 

Declare @v_UpperPart VARCHAR(200) 

Declare @v_UpperStr VARCHAR(200) -- 大写金额

Declare @i_I int


set @v_LowerStr = LTRIM(RTRIM(ROUND(@n_LowerMoney,2))) --四舍五入为指定的精度并删除数据左右空格

set @i_I = 1

set @v_UpperStr = ''


while ( @i_I <= len(@v_LowerStr))

begin

select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)

WHEN '.' THEN '元'

WHEN '0' THEN '零'

WHEN '1' THEN '壹'

WHEN '2' THEN '贰'

WHEN '3' THEN '叁'

WHEN '4' THEN '肆'

WHEN '5' THEN '伍'

WHEN '6' THEN '陆'

WHEN '7' THEN '柒'

WHEN '8' THEN '捌'

WHEN '9' THEN '玖'

END

case @i_I

WHEN 1 THEN '分'

WHEN 2 THEN '角'

WHEN 3 THEN ''

WHEN 4 THEN ''

WHEN 5 THEN '拾'

WHEN 6 THEN '佰'

WHEN 7 THEN '仟'

WHEN 8 THEN '万'

WHEN 9 THEN '拾'

WHEN 10 THEN '佰'

WHEN 11 THEN '仟'

WHEN 12 THEN '亿'

WHEN 13 THEN '拾'

WHEN 14 THEN '佰'

WHEN 15 THEN '仟'

WHEN 16 THEN '万'

ELSE ''

END

set @v_UpperStr = @v_UpperPart + @v_UpperStr

set @i_I = @i_I + 1

end


if ( 0 = @v_TransType)

begin

set @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零') 

set @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零') 

set @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零') 

set @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')

set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')

set @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')

set @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')

set @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')

set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')

set @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')

set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')

set @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')

set @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')

set @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')

set @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')

set @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')

set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')

end


-- 对壹元以下的金额的处理 

if ( '元' = substring(@v_UpperStr,1,1))

begin

set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

end


if ( '零' = substring(@v_UpperStr,1,1))

begin

set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

end


if ( '角' = substring(@v_UpperStr,1,1))

begin

set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

end


if ( '分' = substring(@v_UpperStr,1,1))

begin

set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))

end


if ('整' = substring(@v_UpperStr,1,1))

begin

set @v_UpperStr = '零元整'

end

return @v_UpperStr

END