计算总计

时间:2018-01-18 12:09:08

标签: sql-server

我有一个查询来计算加税后的总金额和数量的价格。我创建了一个公式,如果填写了所有字段,则计算值很好。 我的问题是,如果没有输入单个字段,在某些情况下不适用,我得到的结果是NULL。

CREATE TABLE StockRequest
(
ID Int,
Item Varchar(25),
RequestedQty Int,
Price Int,
MiscExpense Int,
ExchangeRate Int
);

INSERT INTO StockRequest VALUES (1, 'Bottle', '2', '25', '2', '3');
INSERT INTO StockRequest VALUES (2, 'Mouse', '10', '150', NULL, NULL);
INSERT INTO StockRequest VALUES (3, 'Mouse Pad', '5', '70', '2', '3');
INSERT INTO StockRequest VALUES (4, 'Glass', '6', '100', '2', NULL);
INSERT INTO StockRequest VALUES (5, 'Cup', '6', '50', NULL, '3');


SELECT Item, RequestedQty, Price, (RequestedQty*Price)+MiscExpense+ExchangeRate AS [Total]
FROM StockRequest

3 个答案:

答案 0 :(得分:1)

如果是null或不使用ISNULL

,您应该在进行数学运算之前检查列
SELECT Item, RequestedQty, Price,
(ISNULL(RequestedQty, 1)*ISNULL(Price, 1))+ISNULL(MiscExpense, 
1)+ISNULL(ExchangeRate, 1)AS [Total]
FROM StockRequest

ISNULL检查列值是否为null。如果为null则将列值设置为给定参数(在这种情况下我给了1

答案 1 :(得分:1)

您可以使用ISNULL功能。

  

用指定的替换值替换NULL。

未经测试,但可能还好:

SELECT 
    [Item]
  , [RequestedQty]
  , [Price]
  , (ISNULL([RequestedQty], 0) * ISNULL([Price], 0) + ISNULL([MiscExpense], 0) + ISNULL([ExchangeRate], 0)) AS [Total]
FROM [StockRequest];

更新:当然,必须根据所需的业务逻辑选择替换值。

答案 2 :(得分:1)

使用ISNULL

TestEnvironment

<强>输出

SELECT Item, RequestedQty, Price, 
    (RequestedQty*Price)+ISNULL(MiscExpense,0)+ISNULL(ExchangeRate,0) AS [Total]
FROM StockRequest