首页 > 解决方案 > 是否有一种简洁的方法可以对 SQL 查询的所有列执行相同的合并?

问题描述

假设我有一个查询:

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

coalesce除了 n 列之外,有没有一种方法可以像上面那样应用拱形?例如仅适用于FirstName,LastNameSex, 不适用于其余部分。

标签: sqlsql-serversql-server-2014coalesce

解决方案


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

你应该问自己的问题是,

  1. 为什么我NULL首先拥有这些价值观?
  2. 为什么我要在我的 TSQL 中处理我的数据表示?TSQL 是使用基于集合的操作检索关系数据的出色工具。TSQL 是使您的数据看起来不错的坏工具。
  3. 除了性能不足和未来的头痛之外,NULL用什么来代替我?'Unknown'

推荐阅读