2009-11-02 18 views
64

Tengo una consulta de Microsoft SQL Server 2008 que devuelve datos de tres tablas utilizando una combinación externa izquierda. Muchas veces, no hay datos en la segunda y tercera tablas, así que obtengo un valor nulo que creo que es el predeterminado para la combinación externa izquierda. ¿Hay alguna manera de reemplazar los valores predeterminados en la declaración de selección? Tengo una solución en el sentido de que puedo seleccionar una variable de tabla, pero se siente un poco sucia.Reemplazar valores nulos predeterminados devueltos desde el exterior izquierdo Unir

SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', 
iar.Compliance FROM InventoryAdjustmentReason iar 
LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 

Me gustaría que la cantidad y el precio normal por defecto a cero si es posible.

Respuesta

102

que es tan fácil como

IsNull(FieldName, 0) 

O más completo:

SELECT iar.Description, 
    ISNULL(iai.Quantity,0) as Quantity, 
    ISNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
    iar.Compliance 
FROM InventoryAdjustmentReason iar 
LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 
+3

Sabía que tenía que ser fácil, pero por alguna razón, estaba bloqueado sobre cómo hacerlo. Gracias. –

+29

Si es MySQL, IsNull debe reemplazarse por 'IFNULL'. Gracias. – Dhanushka

+10

En PostgreSQL, parece ser ["COALESCE"] (http://www.postgresql.org/docs/9.3/static/functions-conditional.html). Para MySQL, la página de manual está aquí: ["IFNULL"] (http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html). No estoy seguro sobre el estándar. –

0

No su ISNULL, en este IFNULL.

SELECT iar.Description, 
     IFNULL(iai.Quantity,0) as Quantity, 
     IFNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
     iar.Compliance 
    FROM InventoryAdjustmentReason iar 
    LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
    LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
    LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 
Cuestiones relacionadas