2008-10-15 9 views
3

J'ai besoin d'une requête SQL qui renvoie ContactDate, SortName, City, ContactType et Summary dans les tableaux ci-dessous. Si une valeur est nulle, j'en ai besoin pour retourner le texte "No Entry".Requête SQL qui remplace les valeurs NULL.

ContactTable

  • ContactID
  • ContactDate
  • UserID
  • Résumé
  • ContactType
  • SortName

usertable

  • UserID
  • Prénom
  • NOM
  • AddressID

AddressTable
  • AddressID
  • Ville
  • Rue
  • État
  • Zip
+0

MS SQL 2000 va finalement à Crystal Reports 8.0 – Solracnapod

Répondre

14
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 

Here est un tableau de formats SQL DateTime pour l'instruction CONVERT ci-dessus.

+0

Cela va jeter des exceptions de cast sur la date. –

+0

Vous avez raison, je vais résoudre ce problème. –

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

L'utilisation de ISNULL est assez simple.

+0

Ce code sera bombardé si ContactDate est null bien. "La conversion a échoué lors de la conversion de datetime à partir d'une chaîne de caractères." Vous devez lancer vers varchar. –

8

COALESCE() sur toute plate-forme qui vaut son pesant en sel.

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

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.

+0

C'est la seule réponse à ce jour qui a pris en compte le fait que vous avez besoin de retourner les colonnes non-varchar à varchar pour les utiliser avec coalesce/isnull. –

+0

Il vous manque un parent proche après votre deuxième varchar (10). Nous perdons tous deux pour la négligence! ;-) –

+0

Oui, c'est ce que je reçois pour le taper dans la boîte de réponse :) –

0

En utilisant 'IIF' est une solution DB accès, mais peut travailler dans d'autres blocs 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 deux valeurs dépend de l'évaluation d'une expression.
SQL Syntaxe: IIF (expression, vrai-valeur1, valeur false)

1

La version Oracle de cette fonction est appelée nvl. Même usage - SELECT nvl(col_name, desired_value) FROM foo.

La version la plus générale est decode, qui a trois paramètres et vous permet de spécifier quelle valeur de colonne vous voulez remplacer (vous pouvez remplacer tous les 'Johnny' par 'John' ou quelque chose comme ça).

0

Vous pouvez également effectuer des appels différents pour chaque colonne. Cela prendra 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étez l'opération pour chaque colonne.

Questions connexes