2009-11-04 4 views
0

Avec une table temporaire:Calculer le pourcentage de deux colonnes et écrire retour à la table

DECLARE @Results TABLE (
    CDA  varchar(60), 
    Found  int default 0, 
    Accepted int default 0, 
    Percentage decimal(3,0) default 0.0, 
) 

Comment prenez-vous trouvé peuplaient et colonnes accepté et l'écrire à la colonne Fachverband der chemischen?

J'ai:

UPDATE @Results SET Percentage = (
    SELECT (((Accepted * 1.00)/Found) * 100) FROM @Results 
) 

qui, si vous prenez la ligne SELECT (en commentaire UPDATE) renvoie les valeurs correctes. Toutefois, dans le contexte de la mise à jour, il échoue avec Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.

Comment est-ce que j'écris les valeurs à la ligne correcte?

Répondre

1
UPDATE Result 
    SET Percentage = Accepted/Found * 100 

Il ne fonctionne pas bien avec TROUVE et ACCEPTÉ définie comme INT, utilisez moulé lors de la division ou les déclarer avec le même type que pourcentage.

+0

Je ne peux pas croire que c'était aussi simple! Cependant, c'est un point discutable car j'ai fini par calculer le pourcentage dans les services de rapports via une expression. –

1

Vous avez besoin d'une clause where, par ex. (Non testé)

UPDATE Result oResult 
    SET Percentage = (SELECT Accepted/Found * 100 
         FROM Result iResult 
        WHERE iResult.cda = oResult.cda); 

Cependant, si cela est calculé, vous peut souhaiter ne pas avoir cela comme une colonne et il suffit d'ajouter à toute question au lieu. Notez que la plupart des bases de données ont une fonction de pourcentage.

+0

J'ai pensé à la requête, mais pourquoi compliquer la requête (cela deviendra une procédure stockée) quand je peux cacher la complexité ici? –

+0

Il donne une syntaxe invalide pour oResult. Essayé à la fois égaux et AS et ne fonctionne pas. –

+0

Quelle base de données utilisez-vous? Fonctionne sur oracle ici. > mais pourquoi compliquer la requête (cela deviendra une procédure stockée) quand je peux cacher la complexité ici? Parce que vous savez que les données seront correctes et que vous ne comptez pas sur votre procédure ayant été appelée chaque fois que vous mettez à jour une valeur. – vickirk

Questions connexes