2010-09-19 7 views
0

Un pourcentage erroné a été appliqué à un champ (TotalPercentageAmount) et je dois le corriger. Étant donné 2 champs Montant et TotalPourcentageAmount comment puis-je calculer quel pourcentage a été appliqué? Je dois calculer le pourcentage appliqué à TotalPercentageAmount et mettre à jour la colonne avec le pourcentage correct.Calcul du pourcentage SQL Server appliqué en pourcentage

Petit script que j'ai créé pour miminer mon scénario. La table créée contient un mauvais TotalPercentageAmount !!!

 CREATE TABLE [dbo].[SalesReportTest](
      [Id] [int] NOT NULL, 
      [Amount] [decimal](18, 4) NOT NULL, 
      [TotalPercentageAmount] [decimal](18, 4) NOT NULL, 
     CONSTRAINT [PK_SalesReportTest] PRIMARY KEY CLUSTERED 
     (
      [Id] ASC 
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
     ) ON [PRIMARY] 


     GO 
     SET NOCOUNT ON; 
     SET XACT_ABORT ON; 
     GO 

     BEGIN TRANSACTION; 
     INSERT INTO [dbo].[SalesReportTest]([Id], [Amount], [TotalPercentageAmount]) 
     SELECT 1, 55.0000, 52.0300 UNION ALL 
     SELECT 2, 440.0000, 416.2200 UNION ALL 
     SELECT 3, 300.0000, 283.8000 UNION ALL 
     SELECT 4, -55.0000, -52.0300 UNION ALL 
     SELECT 5, 98.0000, 92.7000 UNION ALL 
     SELECT 6, -10.0000, -9.4600 
     COMMIT; 
     RAISERROR (N'[dbo].[SalesReportTest]: Insert Batch: 1.....Done!', 10, 1) WITH NOWAIT; 
     GO 
+0

Avez-vous Amount et TotalPercentageAmount dans le bon sens? À partir des données fournies, il semble que le montant est l'original et TotalPercentageAmount est le résultat après qu'un ajustement en pourcentage a été appliqué. –

Répondre

1

Vous pouvez essayer ce qui suit pour déterminer le pourcentage utilisé. Cependant, il semble qu'il y ait une certaine perte de précision car la colonne Montant semble être tronquée. J'inclus également une colonne qui montre le calc 5.72% dans vos données d'échantillon.

SELECT *, 
    CAST ((Amount/TotalPercentageAmount - 1) * 100 AS DECIMAL (5, 2)) as Pct, 
    CAST (TotalPercentageAmount * 1.0572 AS INT) Amt_Calc 
FROM [SalesReportTest] 
+0

+1 Il pourrait être utile d'ajouter un CAS pour tester où le dénominateur est 0? –

0

Si je comprends bien, vous pouvez mettre à jour les pourcentages comme:

update SalesReportTest 
set  TotalPercentageAmount = Amount/
      (select sum(amount) from SalesReportTest) 
+0

Merci pour votre réponse. Je pense que ma question est un peu confuse. J'ai besoin de savoir quel pourcentage a été appliqué (comment je fais cela?) Et puis j'ai besoin de mettre à jour le tableau avec le pourcentage correct. De votre requête je ne peux pas voir cela. Encore merci pour votre aide – user451259