Domanda

Ho bisogno di una query SQL che restituisca ContactDate, SortName, City, ContactType e Riepilogo dalle tabelle seguenti. Se un valore è nullo, ne ho bisogno per restituire il testo & # 8220; Nessuna voce & # 8221 ;.

ContactTable

  • ContactID
  • ContactDate
  • UserID
  • Riepilogo
  • ContactType
  • SortName

usertable

  • UserID
  • FirstName
  • Cognome
  • AddressID

AddressTable

  • AddressID
  • Città
  • Via
  • Stato
  • Zip
È stato utile?

Soluzione

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

Qui è un grafico dei formati SQL DateTime per l'istruzione CONVERT sopra.

Altri suggerimenti

COALESCE () su qualsiasi piattaforma che valga il suo peso sotto sale.

Assicurati di gestire i problemi di trasmissione.

Ad esempio:

--(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

ecc. ecc.

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

L'uso di ISNULL è piuttosto semplice.

La versione Oracle di questa funzione si chiama nvl . Stesso utilizzo - SELECT nvl (nome_colore, valore_colorato) DA foo .

La versione più generale di questo è decode , che ha tre parametri e consente di specificare per quale valore di colonna si desidera eseguire una sostituzione (in modo da poter sostituire tutto 'Johnny' con 'John "o qualcosa del genere).

L'uso di ' IIF ' è una soluzione di Access DB ma può funzionare in altri DB.

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

La funzione IIF restituisce uno di 2 valori dipende dalla valutazione di un'espressione.
Sintassi SQL:       IIF (espressione, valore reale1, valore falso)

Puoi anche effettuare chiamate diverse per ogni colonna. Ci vorranno più chiamate individuali, ma potrebbe essere più veloce se non hai molte righe da aggiornare.

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

Ripeti per ogni colonna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top