使用 select 不工作,使用 union all 创建视图

create view with union all using select not working

我在下面的查询中收到错误 ORA-00979: not a GROUP BY expression 并且逻辑上它不起作用。

通常逻辑应该是每个 FUND_ISIN 检查 member_descr 的值。如果对于 FUND_ISINmember_descr != 'O'member_descrnull,则从 IS_ID table 中获取所有行。对于每个 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

下面是 fiddle 当前抛出的不是按表达式分组的错误: 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