Tengo una consulta para calcular la cantidad total después de la adición de impuestos y el precio por cantidad. He creado una fórmula que calcula los valores bien si se rellenan todos los campos. Mi problema es que si no se ingresa un solo campo, que en algunos casos no es aplicable, el resultado que obtengo es 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
0
Doonie Darkoo 18 ene. 2018 a las 15:09

3 respuestas

La mejor respuesta

Ir con ISNULL

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

SALIDA

Item                      RequestedQty Price       Total
------------------------- ------------ ----------- -----------
Bottle                    2            25          55
Mouse                     10           150         1500
Mouse Pad                 5            70          355
Glass                     6            100         602
Cup                       6            50          303

(5 rows affected)
1
Pawan Kumar 18 ene. 2018 a las 12:15

Debe verificar las columnas antes de hacer los cálculos si es null o no usa ISNULL

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

ISNULL verifica el valor de la columna que si es nulo o no. si es nulo, establece el valor de la columna en el parámetro dado (en este caso di 1)

1
Badiparmagi 18 ene. 2018 a las 12:13

Puede hacer uso de ISNULL función.

Reemplaza NULL con el valor de reemplazo especificado.

No probado, pero probablemente bien:

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

ACTUALIZACIÓN: Por supuesto, el valor de reemplazo debe elegirse en función de la lógica empresarial deseada.

1
Onkel Toob 18 ene. 2018 a las 12:13
48321009