sql - 是否有一种简洁的方法可以对 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
,LastName
和Sex
, 不适用于其余部分。
解决方案
不,你不能那样做。COALESCE “是CASE
表达式的语法快捷方式。”
你应该问自己的问题是,
- 为什么我
NULL
首先拥有这些价值观? - 为什么我要在我的 TSQL 中处理我的数据表示?TSQL 是使用基于集合的操作检索关系数据的出色工具。TSQL 是使您的数据看起来不错的坏工具。
- 除了性能不足和未来的头痛之外,
NULL
用什么来代替我?'Unknown'
推荐阅读
- java - 将 C# 转换为 Java。调用泛型类的构造函数的 newInstance() 总是返回 NullPointerException
- java - 如何从 if 语句中动态调用对象的引用名称?
- ansible - ansible-playbook 可以在节点上运行吗?
- node.js - Azure 应用服务与节点进程管理器中断,但适用于节点
- css - 输入为带有 -webkit-appearance 的多行 TEXTAREA
- alibaba-cloud - 阿里巴巴 ECS 实例卡在“待启动”状态
- devexpress - 两个摘要结果的差异 null
- go - dynamodbattribute.UnmarshalMap 将我的变量类型转换为 map[string]interface{}
- android - 具有多个清单的 Android 项目
- cassandra - 我有单个集群 2 节点数据中心,在进行复制测试时,我关闭了 1 个节点,然后通过运行 nodetool status 命令出现错误