甲骨文 根据字段值返回正确的记录

维克多

在上一篇文章中,已经有人帮助了我,并帮助我创建了该选择项,最多返回1条记录。 festpae_id

SELECT *
  FROM
  (
    SELECT discount, osp_id, sero_id, estpt_id, 
           ROW_NUMBER() OVER 
          (PARTITION BY osp_id, sero_id, estpt_id ORDER BY festpae_id DESC) as festpae_id 
      FROM database1 data1
      JOIN database2 data2 ON data2.id = data1.attr_id
     WHERE data1.interest_rate = 1 
       AND data1.ordet_id = data2.id
       AND data1.objt_attr_id = data2.objt_attr_id 
   )
  WHERE festpae_id = 1

记录:

DISCOUNT     OSP_ID    SERO_ID   ESTPT_ID FESTPAE_ID   VALUE
---------- ---------- ---------- ---------- ---------- ----------
      50     619356    3931831       2144    NULL       0
      40     619356    3931831       2144    NULL       1
      30     619356    3931831       2144    2000743    0
      15     619356    3931831       2144    2000744    1

因此,从该选择中,我将获得此记录

DISCOUNT     OSP_ID    SERO_ID   ESTPT_ID FESTPAE_ID   VALUE
---------- ---------- ---------- ---------- ---------- ----------
      50     619356    3931831       2144    NULL       0

目前,我有更多的条件应该检查​​女巫,并且头脑已经崩溃,再加上我的先知知识还不够好。

那我需要什么?如您所见,有2列称为valuefestpae_id必须将它们纳入条件。

  1. 如果记录在哪里存在festpae_id is NULL,那么他应该检查所有记录在哪里festpae_id is NULLvalue = 1然后返回记录(如果存在)。
  2. 如果在哪里没有记录festpae_id is null,那么select应该返回记录MAX(festpae_id)(在这种情况下使用ROW_NUMBER())和where value = 1
  3. 在其他情况下,select应该不返回任何内容。

我知道,可以通过完成此操作DECODE(),但是接下来我需要复制粘贴该女巫的代码是不正确的。也许你们当中的某人会如此友善并分享他对解决方案的想法?现在至少要进行5个小时的工作,却找不到方法。

PS此选择在视图表中用作LEFT OUTER JOIN

戈登·利诺夫

只需调整order by并添加value = 1WHERE

      (PARTITION BY osp_id, sero_id, estpt_id
       ORDER BY (CASE WHEN festpae_id IS NULL
                      THEN 1 ELSE 2
                 END),
                festpae_id DESC
      ) as festpae_id 

和:

WHERE data1.interest_rate AND value = 1

您还可以添加WHERE条件并将其简化ORDER BYORDER BY testpae_id DESC NULLS FIRST

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章