有没有在SQL查询的所有列上执行相同合并的简洁方法?

时间:2018-12-18 09:35:07

标签: sql sql-server sql-server-2014 coalesce

说我有一个查询:

SELECT FirstName, LastName, Sex, Age FROM Human

如果出于任何原因在表中存在一个空值,我们可以:

coalesce(FirstName, 'Unknown')

对于具有更多列的较大查询,不是将每个列单独合并,而是可以将每个单独列合并,但又不重复coalesce个操作的数量?

类似这样的东西:

SELECT coalesce(FirstName, LastName, Sex, Age, 'Unknown') FROM Human

(我知道这是错误的并且不会起作用,这是我的示例中试图说明我的意图的一部分。)

理想情况下,以上代码将依次检查每列,并将所有空值替换为“未知”。有没有比这更简单的方法:

SELECT coalesce(FirstName,'Unknown'), coalesce(LastName,'Unknown'), coalesce(Sex, 'Unspecified'), coalesce(Age,'0') FROM Human

此外,回到此示例:

SELECT coalesce(FirstName, LastName, Sex, Age, 'Unknown') FROM Human

除了n列数量之外,是否有一种方法像上面一样应用拱形coalesce?例如,仅适用于FirstNameLastNameSex,其余不适用。

1 个答案:

答案 0 :(得分:2)

不,您不能那样做。 COALESCE“是CASE表达式的语法快捷方式。”

您应该问自己的问题,

  1. 为什么我首先要拥有这些NULL值?
  2. 为什么我要在TSQL中处理数据的表示形式? TSQL是使用基于集合的操作检索关系数据的好工具。 TSQL是使您的数据看起来不错的坏工具。
  3. NULL代替'Unknown'会给我带来什么,除了表现上的缺陷和日后的麻烦之外?