SQL convertir varchar en argent

J'essaie de calculer le coût total des articles et d'avoir cette valeur dans une nouvelle colonne appelée coût.

Dans mon script de création, les valeurs sont en caractères mais le type de données est argent.

CREATE VIEW ordered_pizzas_view AS SELECT orderpizza_id, order_id, ..., CONCAT(range_price, ' ', crust_surcharge, ' ', sauce_surcharge) AS 'cost' FROM order_pizza INNER JOIN ... WHERE 'cost' = (SELECT SUM(CAST(range_price AS MONEY)) FROM pizza_range) + (SELECT SUM(CAST(crust_surcharge AS MONEY)) FROM crust) + (SELECT SUM(CAST(Sauce_surcharge AS MONEY)) FROM sauce) 

Qu'attendez-vous de concat() ? concat() renvoie une valeur de string qui, en fonction de votre input, va être trois valeurs d'argent séparées par un espace, par exemple $1.00 $2.00 $0.50

Comparer cela à une valeur monétaire va jeter une erreur. Peut-être que vous vouliez juste append les valeurs?

 (range_price + crust_surcharge + sauce_surcharge ) as [cost] 

Remarque: N'utilisez pas de littéraux de string comme alias.


En outre, votre clause where compare un littéral de string ( 'cost' ) à un type de données money partir des sous-requêtes combinées.

 where --'cost' (range_price + crust_surcharge + sauce_surcharge ) = (select Sum(CAST(range_price as money)) from pizza_range) + ( select Sum(CAST(crust_surcharge as money)) from crust ) + ( select Sum(CAST(Sauce_surcharge as money)) from sauce ) 

Remarque: Vous ne pouvez pas utiliser d'alias de colonne dans la clause where , vous devez répéter l'expression ou referencer l'expression à partir d'une table sous-requête / dérivée ou d'un autre opérateur.