[英]where if oracle sql clause
我有以下查询
select
Case
-- Here
When count(distinct g.mobile_no) > 0 Then con.IR_BILLING_GROUP_CODE = bil.billing_group_code Else g.mobile_no END mobile_no,
cu.customer_no, bil.billing_group_code bil
from customers cu
inner join billings bil on bil.code = cu.code
inner join mobile_no g on g.mobile_no = bil.mobile_no
inner join billing_group con on con.code = bil.code
我想在上面的“这里”上添加以下限制。 如果从检索到的移动电话号码中有重复项(这是因为相同的号码在列帐单中有不同的帐单组),那么我想添加限制con.IR_BILLING_GROUP_CODE = bil.billing_group_code,它将仅返回相关的帐单组这样就不会显示错误的重复手机号码? 上面的代码说缺少关键字?
例
Customer Mobile No Bil
123 01243473 02
123 05532234 02
123 05532234 05
因此,由于05532234由于计费组不同而重复,因此我需要对bil列进行过滤。 如果我添加限制con.IR_BILLING_GROUP_CODE = bil.billing_group_code,那么bil = 02或bil = 05,以便我知道哪个是数字05532234的正确计费组。我希望这是有道理的。
您不能在选择列表中放置where子句条件。 如果没有分组,也不能将聚合函数(COUNT)与未聚合的列一起使用。
您可以将行号添加到每个客户的记录中,然后按最匹配(con.ir_billing_group_code = bil.billing_group_code)的顺序计费。 然后过滤结果,例如仅获取最匹配的行,即仅获取行号1。
select customer_no, bil, mobile_no
from
(
select
cu.customer_no, bil.billing_group_code bil, g.mobile_no,
row_number over (partition by cu.customer_no, bil.billing_group_code
order by
case when con.ir_billing_group_code = bil.billing_group_code
then 0
else 1
end
) as rn
from customers cu
inner join billings bil on bil.code = cu.code
inner join mobile_no g on g.mobile_no = bil.mobile_no
inner join billing_group con on con.code = bil.code
)
where rn = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.