Sql 当in运算符不返回记录时,返回null或零
因此,我试图在某些条件下从一个非常大的数据集中聚合大量乘积的总值,并想知道如果in运算符中的任何值不返回记录,是否有方法返回null或0。假设我的查询设置如下(很抱歉,我无法发布实际的表名和列名): 目前,它返回我需要的所有数据,但是,我也希望它在in运算符找不到匹配项的列中返回null或0的行。另外,我的一个限制是无法创建任何表Sql 当in运算符不返回记录时,返回null或零,sql,oracle,Sql,Oracle,因此,我试图在某些条件下从一个非常大的数据集中聚合大量乘积的总值,并想知道如果in运算符中的任何值不返回记录,是否有方法返回null或0。假设我的查询设置如下(很抱歉,我无法发布实际的表名和列名): 目前,它返回我需要的所有数据,但是,我也希望它在in运算符找不到匹配项的列中返回null或0的行。另外,我的一个限制是无法创建任何表 谢谢如果这是Oracle,那么您可以使用分区外部联接语法来执行此操作(称为数据加密) 最好的技术是在公共表表达式中的A、B、C、D、E表之间进行联接,并将分区外部联接
谢谢如果这是Oracle,那么您可以使用分区外部联接语法来执行此操作(称为数据加密) 最好的技术是在公共表表达式中的A、B、C、D、E表之间进行联接,并将分区外部联接到另一个公共表表达式,在该表达式中,为每个in子句值生成一行
在文档中查找分区外部联接以获得指导和示例,还有关于规范化逗号分隔列表的其他问题。这样做需要左外部联接。以下是一种适合您的查询的方法:
with list as (
select 'aaaa' as name from dual union all
select 'aaab' from dual union all
. . .
)
Select A.1, l.name, B.1, sum(D.1 * E.1) total
from list l left outer join
A
on l.name = A.2 . . . , B, C, D, E
where ... [a bunch of joins to connect the tables] and
... [more parameters];
我建议您更改语法,使用标准的join
语法,而不是where
中的隐式连接
您也可以通过查询直接执行此操作:
with list as (
select 'aaaa' as name from dual union all
select 'aaab' from dual union all
. . .
),
yourresults as (
your query goes here
)
select yr.1, l.2, yr.3, total
from list l left outer join
yourresults yr
on l.name = yr.2;
你要什么还不太清楚。也许您可以提供一些示例数据和预期输出?某个地方缺少了一个
groupby
。。。
with list as (
select 'aaaa' as name from dual union all
select 'aaab' from dual union all
. . .
),
yourresults as (
your query goes here
)
select yr.1, l.2, yr.3, total
from list l left outer join
yourresults yr
on l.name = yr.2;