Reemplazar Valores Nulos Predeterminados Devueltos Desde La Unión Externa Izquierda


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 y así obtengo un null que creo que es el valor predeterminado para la unión externa izquierda. ¿Hay alguna forma de reemplazar los valores predeterminados en la instrucción select? Tengo una solución alternativa en la que puedo seleccionar en una variable de tabla, pero se siente un poco sucio.

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 regular por defecto a cero si posible.

Author: OMG Ponies, 2009-11-03

3 answers

Eso es tan fácil como

IsNull(FieldName, 0)

O más completamente:

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'
 111
Author: Michael Haren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-02 22:56:58

En el caso de MySQL o SQLite la palabra clave correcta es IFNULL (no ISNULL).

 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'
 2
Author: Zendem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-05 02:35:22

Para MySQL puedes usar COALESCE(field, 'default') en SELECT como:

  SELECT
    t.id,
    COALESCE(d.field, 'default')
  FROM
     table t
  LEFT JOIN
     detail d ON t.id = d.item
 0
Author: Amir Forsati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-16 17:21:46