如何解决使用选择不起作用创建包含所有视图的联合视图 查询结果
我在下面的查询中遇到ORA-00979: not a GROUP BY expression
错误,并且在逻辑上也无法正常工作。
通常,逻辑应该是对每个FUND_ISIN
检查member_descr
的值。如果对于FUND_ISIN
,member_descr != 'O'
或member_descr
是null
,则从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 举报,一经查实,本站将立刻删除。