【发布时间】:2016-01-02 10:32:31
【问题描述】:
我应该有一个栏目,每年自动更新每个成员的债务
到2013年之前的旧债是60,000,之后变成了75,000
我在程序中还有一个“活动”栏,如果会员还处于活动状态,则设置为“YES”,如果他停止了,则更改为“NO” 还有一个名为“pDebt”的列,代表已付债务
其背后的基本公式是一个简单的 AmountOfDebt - PaidDebt (AKA @Amount - pDebt)
我尝试制作那张新表,但遇到了 2 个问题
-
列(l.7“dateOfRegistration”和l.10“Activity”)在存在并已在其他计算列中使用的同时继续给出著名的“无效列名”
PS:是的,我确实使用了Ctrl + Shift + R,我确实保存了查询,多次重启SQL Server,它仍然显示,所以我猜是输入问题
我无法将我的 WHILE 循环连接到 ADD 函数以添加新表。
这是我的代码,
Use [Project Alpha1]
GO
BEGIN
DECLARE @Amount MONEY = 0,
@IndividualYear int = YEAR([dateOfRegistration])
ALTER TABLE initialTable
ADD fDebt1 AS (WHILE (@IndividualYear < GETDATE() AND [Activity] = 'YES')
BEGIN
IF @IndividualYear = 1998 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 1999 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2000 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2001 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2002 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2003 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2004 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2005 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2006 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2007 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2008 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2009 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2010 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2011 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2012 SET @Amount = @Amount + 60000
Else
IF @IndividualYear = 2013 SET @Amount = @Amount + 60000
Else
SET @Amount = @Amount + 75000
SET @IndividualYear = @IndividualYear + 1
END
@Amount - pDebt)
对不起,我知道我没有正确输入代码的结尾(最后一行是 @Amount - pDebt),但由于我的 WHILE 循环不起作用,我真的不认为它是有必要正确地完成它直到结束
这是在 SQL Server 上制作的
感谢大家的阅读,即使是最细微的帮助,我也将不胜感激。
【问题讨论】:
-
这对我来说听起来像是一个非常奇怪的设计。我想他们也会付款,并且您跟踪个人付款,因此您将拥有某种分类帐表。为什么不设置一个运行插入债务记录而不是重新计算几个字段的 SQL 作业?这样,该表将始终提供帐户余额。
标签: sql-server database while-loop calculated-columns