1
set ANSI_NULLS ON
2
set QUOTED_IDENTIFIER ON
3
GO
4
/************************************************
5
作 者:
6
创建日期:2009-06-01
7
功能说明:根据所传的组织架构编号,计算清欠率
8
************************************************/
9
CREATE PROCEDURE [dbo].[sp_Get_FinanceRate_ALL]
10
@UnitCode varchar(5000),--组织机构编码
11
@Type int, --查询类型(0代表总部查询,1代表区域查询,2代表楼盘查询,3代表自定义查询
12
@StartDate datetime, --开始日期
13
@EndDate datetime --截止日期
14
AS
15
BEGIN
16
declare @TotalAccountMoney decimal(18,2)--往年应收总额
17
select @TotalAccountMoney=sum(AccountMoney) from Finance_Areceivable where ItemType=7 and year(EndDate)<year(getdate())
18
IF(@startDate<@endDate and @TotalAccountMoney>0)--截止日期必须大于开始日期才统计,往年应收累计必须大于0
19
BEGIN
20
declare @UnitName varchar(50) --组织机构名称
21
Declare @Cursor_Expr Cursor--游标
22
--创建临时表
23
CREATE TABLE #Temp_SumRate
24
(
25
UnitName varchar(1000),
26
SumDate varchar(100),
27
acceptSum decimal(10,4)
28
)
29
IF(@Type=0)--总部查询
30
BEGIN
31
--向临时表中插入数据
32
select @UnitName=UnitName From System_FrameWork Where UnitCode=@UnitCode--根据公司编码得到公司名称
33
INSERT INTO #Temp_SumRate
34
select @UnitName as UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from
35
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from
36
(
37
select
38
year(b.GatherDate) as SumYear,
39
month(b.GatherDate) as SumMonth,
40
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum
41
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum
42
--cast(cast(((sum(c.GainMoney)/@TotalAccountMoney)*100) as decimal(10,2)) as varchar(100)), as acceptSum
43
from Finance_Arecei_ReceiptList as c
44
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID
45
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID
46
where b.GatherDate between @StartDate and @EndDate
47
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)
48
--and b.CompanyID in(select distinct CompanyID from V_BuildMessage where UnitCode like @UnitCode+'%')
49
and c.ItemType=7
50
and year(a.EndDate)<year(getdate())
51
group by year(b.GatherDate),month(b.GatherDate)
52
)as newTable
53
END
54
ELSE IF(@Type=1)--区域查询
55
BEGIN
56
set @Cursor_Expr=Cursor scroll dynamic for
57
select UnitCode,UnitName From System_FrameWork AS s Where exists(
58
select * From V_BuildMessage Where UnitCode like @UnitCode+'%' AND PunitCode=s.UnitCode )
59
Open @Cursor_Expr--打开游标
60
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName--区域信息
61
While @@Fetch_Status=0
62
BEGIN
63
--向临时表中插入数据
64
INSERT INTO #Temp_SumRate
65
select @UnitName AS UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from
66
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from
67
(
68
select
69
year(b.GatherDate) as SumYear,
70
month(b.GatherDate) as SumMonth,
71
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum
72
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum
73
from Finance_Arecei_ReceiptList as c
74
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID
75
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID
76
where b.GatherDate between @StartDate and @EndDate
77
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)
78
--and b.CompanyID in(select distinct CompanyID from V_BuildMessage where UnitCode like @UnitCode+'%')
79
and c.ItemType=7
80
and year(a.EndDate)<year(getdate())
81
group by year(b.GatherDate),month(b.GatherDate)
82
)as newTable
83
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName
84
85
END
86
CLOSE @Cursor_Expr--关闭游标
87
DEALLOCATE @Cursor_Expr--删除游标
88
89
90
END
91
ELSE IF(@Type=2)--楼盘查询
92
BEGIN
93
--向临时表中插入数据
94
INSERT INTO #Temp_SumRate
95
select UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from
96
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from
97
(
98
select v.UnitCode,v.UnitName,
99
year(b.GatherDate) as SumYear,
100
month(b.GatherDate) as SumMonth,
101
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum
102
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum
103
from Finance_Arecei_ReceiptList as c
104
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID
105
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID
106
inner join System_FrameWork as v on v.UnitID=a.CompanyID
107
where b.GatherDate between @StartDate and @EndDate
108
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)
109
--and b.CompanyID in(select distinct companyID from V_BuildMessage where UnitCode like @UnitCode+'%')
110
and c.ItemType=7
111
and year(a.EndDate)<year(getdate())
112
group by v.UnitCode,v.UnitName, year(b.GatherDate),month(b.GatherDate)
113
)as newTable
114
END
115
ELSE IF(@Type=3)--自定义查询
116
Begin
117
set @Cursor_Expr=Cursor scroll dynamic for
118
select UnitCode,UnitName From System_FrameWork Where UnitCode
119
in(select Context from CW_F_GetStringsTable_CLR(@UnitCode,','))
120
Open @Cursor_Expr--打开游标
121
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName
122
While @@Fetch_Status=0
123
BEGIN
124
125
--向临时表中插入数据
126
INSERT INTO #Temp_SumRate
127
select @UnitName AS UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from
128
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from
129
(
130
select
131
year(b.GatherDate) as SumYear,
132
month(b.GatherDate) as SumMonth,
133
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum
134
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum
135
from Finance_Arecei_ReceiptList as c
136
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID
137
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID
138
inner join System_FrameWork as v on v.UnitID=a.CompanyID
139
where b.GatherDate between @StartDate and @EndDate
140
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)
141
--and b.CompanyID in(select distinct companyID from V_BuildMessage where UnitCode like @UnitCode+'%')
142
and c.ItemType=7
143
and year(a.EndDate)<year(getdate())
144
group by year(b.GatherDate),month(b.GatherDate)
145
)as newTable
146
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName
147
END
148
CLOSE @Cursor_Expr--关闭游标
149
DEALLOCATE @Cursor_Expr--删除游标
150
END
151
152
/*--方法1----------------------------------
153
--动态拼接动态列名(如:[2008年12月],[2009年1月],[2009年2月],[2009年3月],[2009年4月],[2009年5月])
154
Declare @tableColumn varchar(8000)
155
SET @tableColumn =''
156
Declare @SumDate varchar(100)
157
declare Cursor_col Cursor for select distinct SumDate from #Temp_SumRate --order by SumYear,SumMonth--声明游标
158
open Cursor_col--打开游标
159
FETCH NEXT FROM Cursor_col INTO @SumDate
160
WHILE @@Fetch_Status=0
161
BEGIN
162
SET @tableColumn =@tableColumn+'['+@SumDate+'],'
163
FETCH NEXT FROM Cursor_col INTO @SumDate
164
END
165
CLOSE Cursor_col--关闭游标
166
DEALLOCATE Cursor_col--释放游标
167
set @tableColumn=SUBSTRING(@tableColumn,1,len(@tableColumn)-1)
168
169
--动态拼接Sql查询语句,实现行列转化
170
declare @sql varchar(8000)
171
set @sql = 'select UnitName as 组织机构, '+@tableColumn +' from #Temp_SumRate PIVOT(MAX(acceptSum) for SumDate in ('+@tableColumn+'))as p'
172
exec(@sql)*/
173
174
--方法2--------------------------------------
175
--动态拼接Sql查询语句,实现行列转化
176
declare @sql varchar(8000)
177
set @sql = 'select UnitName as 组织机构 '
178
select @sql = @sql + ' , cast(cast(100*max(case SumDate when ''' + SumDate + ''' then acceptSum else null end) as decimal(10,2)) as varchar)+''%'' [' + SumDate + ']'from (select distinct SumDate from #Temp_SumRate) as a
179
set @sql = @sql + ' from #Temp_SumRate group by UnitName '
180
exec(@sql)
181
182
--删除临时表
183
DROP TABLE #Temp_SumRate
184
END
185
END
186
187
188
189
190
191
192
193
set ANSI_NULLS ON2
set QUOTED_IDENTIFIER ON3
GO4
/************************************************5
作 者:6
创建日期:2009-06-017
功能说明:根据所传的组织架构编号,计算清欠率8
************************************************/ 9
CREATE PROCEDURE [dbo].[sp_Get_FinanceRate_ALL] 10
@UnitCode varchar(5000),--组织机构编码11
@Type int, --查询类型(0代表总部查询,1代表区域查询,2代表楼盘查询,3代表自定义查询12
@StartDate datetime, --开始日期13
@EndDate datetime --截止日期14
AS15
BEGIN16
declare @TotalAccountMoney decimal(18,2)--往年应收总额17
select @TotalAccountMoney=sum(AccountMoney) from Finance_Areceivable where ItemType=7 and year(EndDate)<year(getdate())18
IF(@startDate<@endDate and @TotalAccountMoney>0)--截止日期必须大于开始日期才统计,往年应收累计必须大于019
BEGIN20
declare @UnitName varchar(50) --组织机构名称21
Declare @Cursor_Expr Cursor--游标22
--创建临时表23
CREATE TABLE #Temp_SumRate24
(25
UnitName varchar(1000),26
SumDate varchar(100),27
acceptSum decimal(10,4)28
)29
IF(@Type=0)--总部查询30
BEGIN31
--向临时表中插入数据32
select @UnitName=UnitName From System_FrameWork Where UnitCode=@UnitCode--根据公司编码得到公司名称33
INSERT INTO #Temp_SumRate 34
select @UnitName as UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from 35
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from36
( 37
select 38
year(b.GatherDate) as SumYear,39
month(b.GatherDate) as SumMonth,40
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum 41
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum 42
--cast(cast(((sum(c.GainMoney)/@TotalAccountMoney)*100) as decimal(10,2)) as varchar(100)), as acceptSum 43
from Finance_Arecei_ReceiptList as c 44
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID 45
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID 46
where b.GatherDate between @StartDate and @EndDate47
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)48
--and b.CompanyID in(select distinct CompanyID from V_BuildMessage where UnitCode like @UnitCode+'%')49
and c.ItemType=750
and year(a.EndDate)<year(getdate())51
group by year(b.GatherDate),month(b.GatherDate)52
)as newTable53
END54
ELSE IF(@Type=1)--区域查询55
BEGIN56
set @Cursor_Expr=Cursor scroll dynamic for 57
select UnitCode,UnitName From System_FrameWork AS s Where exists(58
select * From V_BuildMessage Where UnitCode like @UnitCode+'%' AND PunitCode=s.UnitCode )59
Open @Cursor_Expr--打开游标60
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName--区域信息61
While @@Fetch_Status=062
BEGIN63
--向临时表中插入数据64
INSERT INTO #Temp_SumRate 65
select @UnitName AS UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from 66
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from67
(68
select 69
year(b.GatherDate) as SumYear,70
month(b.GatherDate) as SumMonth,71
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum 72
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum 73
from Finance_Arecei_ReceiptList as c 74
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID 75
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID 76
where b.GatherDate between @StartDate and @EndDate77
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)78
--and b.CompanyID in(select distinct CompanyID from V_BuildMessage where UnitCode like @UnitCode+'%')79
and c.ItemType=780
and year(a.EndDate)<year(getdate())81
group by year(b.GatherDate),month(b.GatherDate) 82
)as newTable 83
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName84
85
END86
CLOSE @Cursor_Expr--关闭游标87
DEALLOCATE @Cursor_Expr--删除游标88

89
90
END91
ELSE IF(@Type=2)--楼盘查询92
BEGIN93
--向临时表中插入数据94
INSERT INTO #Temp_SumRate 95
select UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from96
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from97
(98
select v.UnitCode,v.UnitName,99
year(b.GatherDate) as SumYear,100
month(b.GatherDate) as SumMonth,101
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum102
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum 103
from Finance_Arecei_ReceiptList as c 104
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID 105
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID 106
inner join System_FrameWork as v on v.UnitID=a.CompanyID107
where b.GatherDate between @StartDate and @EndDate 108
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)109
--and b.CompanyID in(select distinct companyID from V_BuildMessage where UnitCode like @UnitCode+'%')110
and c.ItemType=7111
and year(a.EndDate)<year(getdate())112
group by v.UnitCode,v.UnitName, year(b.GatherDate),month(b.GatherDate)113
)as newTable114
END115
ELSE IF(@Type=3)--自定义查询116
Begin117
set @Cursor_Expr=Cursor scroll dynamic for 118
select UnitCode,UnitName From System_FrameWork Where UnitCode 119
in(select Context from CW_F_GetStringsTable_CLR(@UnitCode,','))120
Open @Cursor_Expr--打开游标121
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName122
While @@Fetch_Status=0123
BEGIN124

125
--向临时表中插入数据126
INSERT INTO #Temp_SumRate 127
select @UnitName AS UnitName,cast(SumYear as varchar)+'年'+dbo.left_fill_zero(SumMonth,2)+'月' as SumDate,acceptSum from128
--cast(SumYear as varchar)+'年'+case when month(b.GatherDate)<10 then '0'+cast(month(b.GatherDate) as varchar) else cast(month(b.GatherDate) as varchar) end+'月' as SumDate,acceptSum from129
(130
select 131
year(b.GatherDate) as SumYear,132
month(b.GatherDate) as SumMonth,133
--sum(c.GainMoney)/@TotalAccountMoney as acceptSum 134
Round(sum(c.GainMoney)/@TotalAccountMoney,4) as acceptSum 135
from Finance_Arecei_ReceiptList as c 136
inner join Finance_Areceivable as a on a.AreceivableID=c.AreceivableID 137
inner join Finance_PReceipt as b on b.ReceiptID=c.ReceiptID 138
inner join System_FrameWork as v on v.UnitID=a.CompanyID139
where b.GatherDate between @StartDate and @EndDate 140
and exists(select * from V_BuildMessage where UnitCode like @UnitCode+'%' and CompanyID= b.CompanyID)141
--and b.CompanyID in(select distinct companyID from V_BuildMessage where UnitCode like @UnitCode+'%')142
and c.ItemType=7143
and year(a.EndDate)<year(getdate())144
group by year(b.GatherDate),month(b.GatherDate)145
)as newTable146
Fetch Next From @Cursor_Expr into @UnitCode,@UnitName147
END148
CLOSE @Cursor_Expr--关闭游标149
DEALLOCATE @Cursor_Expr--删除游标150
END151
152
/*--方法1----------------------------------153
--动态拼接动态列名(如:[2008年12月],[2009年1月],[2009年2月],[2009年3月],[2009年4月],[2009年5月])154
Declare @tableColumn varchar(8000)155
SET @tableColumn =''156
Declare @SumDate varchar(100)157
declare Cursor_col Cursor for select distinct SumDate from #Temp_SumRate --order by SumYear,SumMonth--声明游标158
open Cursor_col--打开游标159
FETCH NEXT FROM Cursor_col INTO @SumDate160
WHILE @@Fetch_Status=0161
BEGIN162
SET @tableColumn =@tableColumn+'['+@SumDate+'],' 163
FETCH NEXT FROM Cursor_col INTO @SumDate164
END 165
CLOSE Cursor_col--关闭游标166
DEALLOCATE Cursor_col--释放游标167
set @tableColumn=SUBSTRING(@tableColumn,1,len(@tableColumn)-1)168
169
--动态拼接Sql查询语句,实现行列转化170
declare @sql varchar(8000)171
set @sql = 'select UnitName as 组织机构, '+@tableColumn +' from #Temp_SumRate PIVOT(MAX(acceptSum) for SumDate in ('+@tableColumn+'))as p'172
exec(@sql)*/173
174
--方法2-------------------------------------- 175
--动态拼接Sql查询语句,实现行列转化176
declare @sql varchar(8000)177
set @sql = 'select UnitName as 组织机构 '178
select @sql = @sql + ' , cast(cast(100*max(case SumDate when ''' + SumDate + ''' then acceptSum else null end) as decimal(10,2)) as varchar)+''%'' [' + SumDate + ']'from (select distinct SumDate from #Temp_SumRate) as a 179
set @sql = @sql + ' from #Temp_SumRate group by UnitName '180
exec(@sql)181

182
--删除临时表183
DROP TABLE #Temp_SumRate184
END185
END186

187

188

189

190

191

192

193

