Запрос SQL, который заменяет нулевые значения. - PullRequest
3 голосов
/ 16 октября 2008

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

ContactTable

  • ContactID
  • ContactDate
  • ИД пользователя
  • Резюме
  • ContactType
  • SortName

UserTable

  • Идентификатор_пользователь
  • 1032 * FirstName *
  • Фамилия
  • AddressID

AddressTable

  • AddressID
  • Город
  • Улица
  • Государство
  • Zip

Ответы [ 6 ]

14 голосов
/ 16 октября 2008
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

Здесь - диаграмма форматов SQL DateTime для приведенного выше оператора CONVERT.

8 голосов
/ 16 октября 2008

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

и т. Д. И т. П.

4 голосов
/ 16 октября 2008
SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

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

1 голос
/ 16 октября 2008

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

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

0 голосов
/ 16 октября 2008

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

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

Повторите для каждого столбца.

0 голосов
/ 16 октября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...