gpt4 book ai didi

sql - 同一个结果集中的不同表字段 Oracle

转载 作者:行者123 更新时间:2023-12-04 16:08:21 27 4
gpt4 key购买 nike

我正在从具有零售和企业客户的表中进行选择。我希望我的结果集在一列中返回公司和零售客户的名称。目前我将它们返回到两个不同的列中,如下所示:

select e.cust_id, 
e.cust_location,
f.location
max(case
when e.preferredname is not null
then e.preferredname
end
)RETAIL_CUST_NAME,
max(case
when e.preferredname is null
then e.CORP_NANME
end
)CORPORATE_CUST_NAME
from Mytable e,
myothertable f
where e.cust-id = f.cust_id
group by e.cust_id,
e.cust_location,
f.location,
e.preferredname,
e.corp_name;

我正在尝试做的事情是否可行?我如何才能实现这一目标,而不必为零售客户和企业客户返回不同的列?

最佳答案

如果只填充了两个字段中的一个,那么将填充的任何一个作为单个列返回就非常简单:

select e.cust_id, 
e.cust_location,
f.location
coalesce(e.preferredname, e.CORP_NANME) as CUST_NAME,
from Mytable e
join myothertable f on e.cust_id = f.cust_id

coalesce 返回它遇到的第一个非空值。

我不确定您的查询中的聚合点是什么,所以我将其排除在外。


作为脚注,在 Oracle 中,nvlcoalesce 的执行非常相似,但有以下重要区别:

  1. nvl 只接受 2 个参数,而 coalesce 可以接受 n 个参数
  2. 当函数或方程式作为参数传递给它们时,nvl 将评估其所有参数,但 coalesce 将按顺序评估每个参数,当达到非-null 值(换句话说,coalesce 将使用短路评估,但 nvl 不会)。

这非常重要,因为您会经常看到 nvl 用于类似目的。

关于sql - 同一个结果集中的不同表字段 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126618/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com