2010-05-31 5 views
1

J'ai une table ms-sql avec la structure suivante:Méthode la plus rapide pour calculer le résumé du champ de la base de données

Nom nvarchar; Sign nvarchar; Valeur int

contenu par exemple:
test1 'plus', 5
test1 'moins', 3
Test2, 'moins', 1

Je voudrais avoir des totaux par "Nom" . (Ajouter quand signe = plus, soustrayez quand signe = moins)

Résultat:
Test1, 2
Test2, -1

Je veux montrer ces résultats (et les mettre à jour lorsqu'un nouvel enregistrement est ajouté) ... et je suis à la recherche de la solution la plus rapide! [sproc? curseur d'avance rapide? .net Calculate dans]

+0

peut-être un choix malheureux, mais mon vrai nom de la structure de la table et les colonnes sont différentes. Je voulais simplifier les choses ... – Jowen

Répondre

0
select Name, 
    sum(case 
      when Sign = 'plus' then Value 
      when Sign = 'minus' then -Value 
      else 0 
     end) 
from MyTable 
group by Name 
7

La solution la plus rapide est de redessiner votre base de données pour stocker la valeur comme un entier signé. Stocker le signe séparément n'a aucun avantage.

0

Une autre variante

select Name, 
    sum(value*case 
      when Sign = 'plus' then 1 
      when Sign = 'minus' then -1 
      else 0 
     end) 
from MyTable 
group by Name 
Questions connexes