微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用选择不起作用创建包含所有视图的联合视图 查询结果

如何解决使用选择不起作用创建包含所有视图的联合视图 查询结果

我在下面的查询中遇到ORA-00979: not a GROUP BY expression错误,并且在逻辑上也无法正常工作。

通常,逻辑应该是对每个FUND_ISIN检查member_descr的值。如果对于FUND_ISINmember_descr != 'O'member_descrnull,则从IS_ID表中获取所有行。对于每个FUND_ISIN,如果member_descr = 'O',则对member_ratio字段值(例如100-sum(all the values for member_ratio where member_descr!='O'))进行计算。

例如,在这种情况下,预期输出将如下所示。我们可以在下面看到FUND_ISIN L000123,我们检查member_descr = 'O',然后以100-(8.5643 + 6.94816) = 84,48754进行计算,对于其他行,其中member_descr!= 'O'仅采用这些行。这样,我们必须为每个fund_isin做。

预期输出

FUND_ISIN  FUND_QUOTE_CRNY  MEMBER_DESCR  MEMBER_RATIO  ALLOCATIONASSETTYPE
L000123       USD               O           84,48754       Other total
L000123       USD               null        8.5643         Cash total
L000123       USD               null        6.94816        member

下面是小提琴,它当前未按表达式错误进行分组: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=3f48a9a4f439869168775bb2c7283db6

解决方法

我认为您可能使查询复杂化了。不需要UNION ALL或什至GROUP BY即可达到所需的输出。您可以使用分析功能来获得结果。

查询

SELECT fund_isin,fund_quote_crny,member_descr,CASE member_descr
           WHEN 'O'
           THEN
                 100
               - SUM (CASE member_descr WHEN 'O' THEN 0 ELSE member_ratio END)
                     OVER (PARTITION BY fund_isin)
           ELSE
               member_ratio
       END    AS member_ratio,allocationassettype
  FROM is_id;

结果

   FUND_ISIN    FUND_QUOTE_CRNY    MEMBER_DESCR    MEMBER_RATIO    ALLOCATIONASSETTYPE
____________ __________________ _______________ _______________ ______________________
L000123      USD                O                      84.48754 Other total
L000123      USD                null                    6.94816 member
L000123      USD                null                     8.5643 Cash total

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。