2016-02-11 38 views
0

我使用这个公式SQL Server 2012的MONEY数据类型问题

(p.Price - i.Price) * q.Qty 

在SQL Server 2012中有0或nullp.Price值。 p.Pricei.Price的数据类型是moneyq.Qtyint

因此,如果计算结果为(0-10.00) * 50 = -500.00(这是一个负数,因为它是按计划购买的产品),但我总是在我的数据表中得到0或空值。

更新:

(sum(p.Price - i.Price) * q.Qty) 

,但我得到一个无效在选择列表中,因为它不是在聚合或group by子句包含的?

+0

价格没有按;吨通常在负数最终 – HLGEM

+0

你需要一些分组或总和(q.qty) – SQLChao

+3

空+ anythign = NULL相同的所有数学运算 – HLGEM

回答

1

在SQL Server money类型中可以是负数。它具有此范围:

-922,337,203,685,477.5808 to 922,337,203,685,477.5807 

检查您的数据和公式,应该按预期工作:

DECLARE @m1 money = 0; 
DECLARE @m2 money = 10; 
DECLARE @qty int = 50; 

SELECT (@m1 - @m2) * @qty 

结果

(No column name) 
-500.00 

如果值可以为NULL,你可以使用ISNULL将它们变成零:

DECLARE @m1 money = NULL; 
DECLARE @m2 money = 10; 
DECLARE @qty int = 50; 

SELECT (ISNULL(@m1,0) - ISNULL(@m2, 0)) * ISNULL(@qty, 0) 

结果

(No column name) 
-500.00