Question

J'ai besoin d'une requête SQL qui renvoie ContactDate, SortName, City, ContactType et Summary à partir des tableaux ci-dessous. Si une valeur est nulle, il me faut le texte & # 8220; Aucune entrée & # 8221;.

Table des contacts

  • ContactID
  • ContactDate
  • ID utilisateur
  • Résumé
  • Type de contact
  • SortName

Table utilisateur

  • ID utilisateur
  • Prénom
  • Nom
  • AddressID

AddressTable

  • AddressID
  • Ville
  • rue
  • État
  • Zip
Était-ce utile?

La solution

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

Voici un tableau des formats SQL DateTime pour l'instruction CONVERT ci-dessus.

Autres conseils

COALESCE () sur toute plate-forme digne de ce nom.

Assurez-vous de gérer les problèmes de casting.

Tels que:

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

Utiliser ISNULL est assez simple.

La version Oracle de cette fonction s'appelle nvl . Même utilisation - SELECT nvl (nom_colonne, valeur-souhaitée) FROM foo .

La version plus générale de ceci est decode , qui a trois paramètres et vous permet de spécifier la valeur de colonne pour laquelle vous voulez remplacer (afin que vous puissiez remplacer tous les "Johnny" par "John 'ou quelque chose).

L'utilisation de IIF est une solution de base de données Access mais peut fonctionner dans d'autres bases de données.

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

La fonction IIF renvoie l'une des 2 valeurs dépendant de l'évaluation d'une expression.
Syntaxe SQL:       IIF (expression, valeur vraie1, valeur fausse)

Vous pouvez également faire différents appels pour chaque colonne. Il faudra plus d’appels individuels, mais cela peut être plus rapide si vous n’avez pas beaucoup de lignes à mettre à jour.

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

Répéter pour chaque colonne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top