Pergunta

Preciso de uma consulta SQL que retorne a ContactDate, SortName, City, ContactType e Resumo das tabelas abaixo. If any value is null, I need it to return the text “No Entry”.

ContactTable

  • ContactId
  • ContactDate
  • ID do usuário
  • Resumo
  • Tipo de Contato
  • SortName

Usuário

  • ID do usuário
  • Primeiro nome
  • Sobrenome
  • Endereço

Endereço

  • Endereço
  • Cidade
  • Rua
  • Estado
  • Fecho eclair
Foi útil?

Solução

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

Aqui é um gráfico de formatos SQL DateTime para a instrução convert acima.

Outras dicas

Coalesce () em qualquer plataforma que valha seu peso no sal.

Certifique -se de lidar com problemas de elenco.

Tal como:

--(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 o ISNULL é bem simples.

A versão Oracle desta função é chamada nvl. Mesmo uso - SELECT nvl(col_name, desired_value) FROM foo.

A versão mais geral disso é decode, que possui três parâmetros e permite especificar para qual valor da coluna você deseja executar um substituto (para que você possa substituir todos os 'Johnny' por 'John' ou algo assim).

Usando 'IIF'É uma solução de banco de dados de acesso, mas pode funcionar em outros DBs.

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

A função IIF retorna um dos 2 valores depende da avaliação de uma expressão.
Sintaxe SQL: IIF (Expressão, Valor True1, Valor Falso)

Você também pode fazer chamadas diferentes para cada coluna. Isso fará mais chamadas individuais, mas pode ser mais rápido se você não tiver muitas linhas para atualizar.

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

Repita para cada coluna.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top