Pregunta

Necesito una consulta SQL que devuelva ContactDate, SortName, City, ContactType y Summary de las tablas a continuación. Si algún valor es nulo, lo necesito para devolver el texto "Sin entrada".

ContactTable

  • ContactID
  • Fecha de contacto
  • ID de usuario
  • Resumen
  • ContactType
  • SortName

UserTable

  • UsuarioID
  • Nombre
  • Apellido
  • AddressID

AddressTable

  • AddressID
  • ciudad
  • calle
  • estado
  • Zip
¿Fue útil?

Solución

SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
       COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
       COALESCE(AddressTable.City, 'No Entry') AS City,
       COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID

Aquí es un gráfico de los formatos de fecha y hora de SQL para la declaración CONVERT anterior.

Otros consejos

COALESCE () en cualquier plataforma que valga su peso en sal.

Asegúrate de manejar los problemas de casting.

Por ejemplo:

--(SQL Server)
SELECT
  C.ContactID,
  COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
  COALESCE(SorName, 'No Entry') AS SortName

etc., etc.

SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

Usar ISNULL es bastante simple.

La versión de Oracle de esta función se llama nvl . Mismo uso - SELECT nvl (col_name, desired_value) FROM foo .

La versión más general de esto es decode , que tiene tres parámetros y le permite especificar qué valor de columna desea reemplazar (para que pueda reemplazar todos 'Johnny' con 'John' 'o algo).

El uso de ' IIF ' es una solución de Access DB pero puede funcionar en otros DBs.

SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName   

La función IIF devuelve uno de los 2 valores dependiendo de la evaluación de una expresión.
Sintaxis SQL:       IIF (expresión, true-value1, false-value)

También puedes hacer diferentes llamadas para cada columna. Tomará más llamadas individuales, pero puede ser más rápido si no tiene muchas filas para actualizar.

update ContactTable
set ContactDate = 'No Entry'
where ContactDate is null;

Repita para cada columna.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top