繁体   English   中英

如果oracle sql子句在哪里

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM