Je suis censé avoir une colonne qui met à jour automatiquement la dette de chaque membre, par an
L'ancienne dette était de 60 000 jusqu'à l'année 2013, après quoi elle est devenue 75 000
Il y a aussi une colonne "Activité" que j'utilise dans le programme, si le membre est toujours actif, il est réglé sur "OUI", s'il s'arrête, il est remplacé par "NON". Il y a aussi UNE AUTRE colonne appelée "pDebt". Dette
La formule de base derrière est un simple AmountOfDebt – PaidDebt (AKA @Amount – pDebt)
J'ai essayé de faire cette nouvelle table, mais j'avais 2 problèmes
Les colonnes (l.7 "dateOfRegistration" & l.10 "Activity") continuent de donner le fameux "Nom de Colonne Invalide" tout en étant existant et déjà utilisé dans d'autres colonnes calculées
PS: oui, j'ai utilisé Ctrl + Maj + R, j'ai sauvegardé la requête, redémarrer SQL Server plusieurs fois, ça se voit encore, donc je suppose qu'il y a un problème d'input
Je ne peux pas connecter ma boucle WHILE à la fonction ADD pour append la nouvelle table.
Voici mon code,
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)
Je suis désolé, je sais que je n'ai pas tapé la fin du code correctement (la dernière ligne disant @Amount – pDebt), mais comme ma boucle WHILE ne fonctionnait pas, je ne pensais pas vraiment qu'il était nécessaire de travailler à travers jusqu'à la fin soit correctement
Ceci est fait sur SQL Server
Merci d'avoir lu les gars, j'apprécierais même la moindre aide.
Une méthode consiste à envelopper votre logique / calculs dans une fonction scalaire afin que votre champ calculé appelle simplement la fonction. Ce sera aussi plus facile à tester.
ALTER TABLE initialTable ADD fDebt1 AS dbo.f_CalculateDebt([RegistrationDate], [Activity], [Debt])
Votre fonction scalaire pourrait alors ressembler à ceci:
CREATE FUNCTION f_CalculateDebt( @RegistrationDate DATETIME, @Activity NVARCHAR(100), @Debt MONEY ) RETURNS MONEY AS BEGIN DECLARE @Amount MONEY = 0, @IndividualYear INT = YEAR(@RegistrationDate) WHILE (@IndividualYear < YEAR(GETDATE()) AND @Activity = 'YES') BEGIN IF @IndividualYear = 1998 SET @Amount = @Amount + 60000 -- Removed for readability -- ELSE IF @IndividualYear = 2013 SET @Amount = @Amount + 60000 ELSE SET @Amount = @Amount + 75000 SET @IndividualYear = @IndividualYear + 1 END RETURN @Amount - @Debt END GO