2

我需要一个从下表中返回 ContactDate、SortName、City、ContactType 和 Summary 的 SQL 查询。如果任何值为空,我需要它返回文本“No Entry”。

联系表

  • 联系人 ID
  • 联系日期
  • 用户身份
  • 概括
  • 联系人类型
  • 排序名称

用户表

  • 用户身份
  • 地址ID

地址表

  • 地址ID
  • 城市
  • 街道
  • 状态
  • 压缩
4

6 回答 6

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

是上面 CONVERT 语句的 SQL DateTime 格式图表。

于 2008-10-15T22:23:07.943 回答
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

等等等等

于 2008-10-15T22:25:21.307 回答
4
SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

使用 ISNULL 非常简单。

于 2008-10-15T22:23:37.147 回答
1

该函数的 Oracle 版本称为nvl. 用法相同—— SELECT nvl(col_name, desired_value) FROM foo

更通用的版本是decode,它具有三个参数,并允许您指定要执行替换的列值(因此您可以将所有 'Johnny' 替换为 'John' 或其他内容)。

于 2008-10-16T00:26:52.077 回答
0

使用“ IIF ”是一种 Access DB 解决方案,但可能适用于其他 DB。

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

函数 IIF 返回 2 个值之一,具体取决于表达式的评估。
SQL 语法:IIF( 表达式, true-value1, false-value )

于 2008-10-16T00:20:45.553 回答
0

您还可以对每一列进行不同的调用。这将需要更多的个人调用,但如果您没有很多行要更新,它可能会更快。

更新联系人表
设置 ContactDate = '无条目'
其中 ContactDate 为空;

对每一列重复。

于 2008-10-16T02:16:44.197 回答