求一个高效的存储过程编写

莫鸣 2013-11-19 05:10:15
问题是这样子的。公司有一个收滞纳金费用(超过一天收0.2%)。
当在每个月的15号(不包含15号)之后,未缴费的都要计算他的滞纳金。
因为用户比较多。请问这个语句什么写。比如这个表。
create table pTB
(id int,
PHuHao varchar(30),
Pdate datetime,
Pmoney Money,
Pzt varchar(10),
pzn money
)

数据为:

然后写一个存储过程。怎么写呢?请高手们帮忙写个高效的语句。谢谢..
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
莫鸣 2013-11-20
  • 打赏
  • 举报
回复
最麻烦就是跨月份,甚至跨年份的。要去判断一下。然后再计算出全部的天数*剩总费用*0.002=滞纳金
莫鸣 2013-11-20
  • 打赏
  • 举报
回复
领导,也许是我表达不明白,其实是这样子的。
有一个缴费表,正常缴费是上个月的费用在本月的15号之前交完。当超过了本月15号后,就开始收取滞纳金(pzn)一天收取总费用的0.002。因此,需要计算天数。然后每天更新滞纳金的费用。直到他来缴费。然后收据费用和滞纳金。因为有很多的时候,很多人跨越欠费用。比如说8月份要缴费的,到11月才交,比如11月6号来交,就需要计算8月16号到11月6号的滞纳金。因为系统只有费用年份,费用月份两个字段。请问如何去做个存储过程。计算这个费用。
我想在程序每次运行的时候,就去计算滞纳金费用pzn。状态为未缴费的。
(其中缴费日期的字段为:pdata ;费用年份为:pyear ,费用月份为:pmonth,滞纳金为:pzn,总费用为:pvale)
表具体是这样子的:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TepTo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TepTo]
GO

CREATE TABLE [dbo].[TepTo] (
[id] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Phuhao] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[pyear] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[Pmonth] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[Pdate] [datetime] NULL ,
[pvale] [int] NULL ,
[Pzn] [money] NULL ,
[pzt] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

--小F-- 2013-11-19
  • 打赏
  • 举报
回复
时间范围自己去限定一下吧。没测试。
--小F-- 2013-11-19
  • 打赏
  • 举报
回复
if object_id('rpTBByPdate','P') is not null
	DROP PROC [rpTBByPdate]
Go
CREATE PROCEDURE rpTBByPdate
AS
DECLARE @D INT,@FirstDay DATETIME,@Pdate DATETIME
SELECT @Pdate=Pdate FROM pTB
SELECT @FirstDay=CONVERT(datetime,CONVERT(char(8),@Dt,120)+'15')  --本月的第十五天

IF DATEPART(dd,@Pdate)>15

SELECT @D=DATEDIFF(dd,@FirstDay,@Pdate)

ELSE 

SELECT @D=1

SELECT id,PHuHao,Pdate,Pmoney AS Pvalue,pzn=Pmoney*1.0*@D FROM pTB 
  
Go
莫鸣 2013-11-19
  • 打赏
  • 举报
回复
主要是每天的时间在变化,然后最后pzn的值也跟着循环变化,pvale*0.2%=pzn。有很多条语句 只要是未缴费的。每天都要递增他的滞纳金。
莫鸣 2013-11-19
  • 打赏
  • 举报
回复
结果是最后的那个pzn的金额随着当天日期的变化而变化,应该是有两个时间字段,一个时间是2013-11-15。也就是说,在每个月的15号之后,pdate>本月的15号之后,那个pzn每次都要计算滞纳金。
--小F-- 2013-11-19
  • 打赏
  • 举报
回复
你需要得到的结果是什么?

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧