2008-10-15 3 views
3

Мне нужен SQL-запрос, который возвращает ContactDate, SortName, City, ContactType и Summary из приведенных ниже таблиц. Если какое-либо значение равно null, мне нужно вернуть текст «Нет записи».SQL-запрос, который заменяет нулевые значения.

ContactTable

  • ContactID
  • ContactDate
  • Идентификатор_пользователя
  • Резюме
  • ContactType
  • SortName

UserTable

  • Идентификатор_пользователя
  • FirstName
  • ЬазШате
  • AddressID

AddressTable

  • AddressID
  • Город
  • Улица
  • Государственный
  • Zip
+0

MS SQL 2000 в конечном счете собирается в отчетах о кристаллах 8.0 – Solracnapod 2008-10-16 21:32:54

ответ

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 представляет собой блок форматов SQL DateTime для утверждения CONVERT выше.

+0

Это приведет к исключению исключения на дату. – 2008-10-15 22:24:21

+0

Вы правы, я исправлю это. – 2008-10-15 22:27:51

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

Использование ISNULL довольно просто.

+0

Этот код будет бомбить, если ContactDate имеет значение null. «Ошибка конверсии при преобразовании даты и времени из символьной строки». Вам нужно бросить в варчар. – 2008-10-15 22:38:59

8

COALESCE() на любой платформе, которая стоит своего веса в соли.

Удостоверьтесь в том, что у вас возникли проблемы с литьем.

Такие, как:

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

и т.д. и т.п.

0

Использование 'IIF' представляет собой решение доступа БД, но может работать и в других DBS.

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

Функция IIF возвращает одно из 2 значений, зависит от оценки выражения.
SQL Синтаксис: ИМФ (выражение, истинно значение1, ложно-значение)

1

версия Oracle этой функции называется nvl. То же самое использование - SELECT nvl(col_name, desired_value) FROM foo.

Более общая версия этого номера: decode, который имеет три параметра и позволяет указать, какое значение столбца вы хотите выполнить для замены (так что вы можете заменить все «Джонни» на «Джон» или что-то в этом роде).

0

Вы также можете делать разные вызовы для каждого столбца. Это потребует больше индивидуальных вызовов, но может быть быстрее, если у вас не будет много строк для обновления.

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

Повторите для каждой колонки.

Смежные вопросы