2012-06-06 1 views
2

Voici ma situation:ajouter SQL Server colonne calculée VIEW avec conditions

Dans ma table i deux champs:

- Price (decimal (15,4) 
- TaxId (int) 

valeur TaxId est stockée nulle part, mais il n'y a que deux valeurs (actualy 3).

- 1 (8.5%) 
- 2 (20%) 
- NULL (no tax) 

Maintenant, j'ai besoin de colonne calculée à mon avis qui permettrait de calculer le nouveau prix avec les taxes incluses.

Une idée?

Je suis allé avec quelque chose comme:

SELECT... 
CASE TaxId 
    WHEN 1 THEN Price *1.085 AS test 
    WHEN 2 THEN Price *1.2 AS test 
    WHEN NULL THEN Price AS test END 
FROM... 

MISE À JOUR:

J'ai réussi à exécuter la requête avec succès.

CASE dbo.Table.TaxId WHEN 1 THEN dbo.Table.Price*1.085 WHEN 2 THEN dbo.Table.Price*1.2 ELSE dbo.Table.Price END AS CalcualtedPrice 

Maintenant je dois seulement faire CalculatedPrice en décimal (15,4). Comment puis-je définir cela?

+1

« Je suis allé avec quelque chose comme "... et? Quel était le résultat? –

+0

J'ai mis à jour ma question. – no9

+1

'CAST (CASE ... END AS décimal (15,4)) AS CalculatedPrice'? –

Répondre

4

Oui, google comment créer une vue dans SQL Server et dans l'instruction SELECT de votre vue, multipliez la colonne Prix par la colonne TaxId. Étant donné que vous devez considérer la valeur NULL, vous devez utiliser COALESCE comme ce

SELECT 
Price * (1 + COALESCE(TaxId/100), 0) AS newValue 
... 

en supposant que vous avez juste « 8.5 » dans votre colonne et non pas « 8,5% ». Est-ce varchar ou pas?

PS: COALESCE() retourne la première valeur non nulle

MISE À JOUR après la question a été modifiée:

Il vous suffit de modifier légèrement votre syntaxe

SELECT 
CAST(
CASE 
    WHEN TaxId = 1 THEN Price *1.085 
    WHEN TaxId = 2 THEN Price *1.2 
    WHEN TaxId IS NULL THEN Price END AS decimal(15,4) 
) AS CalculatedPrice 
FROM... 
+0

Je n'ai pas de valeurs fiscales réelles juste quelques codes (entier). Je sais que 1 est 8,5, 2 est 20. Et il pourrait aussi être NULL, ce qui signifie aucune taxe. J'ai besoin d'une colonne supplémentaire qui calcule mon prix en fonction du TaxID. – no9

+0

Votre modification "Je suis allé quelque chose comme ça ..." semble bien. Quel est le problème? Oh, mais supprimez le "AS test" s et écrivez-le une fois après "END", comme "CAS WHEN ... END AS test" – fancyPants

+0

Attendez, j'ai repéré une erreur ... éditera ma réponse. – fancyPants

Questions connexes