使用 select 不工作,使用 union all 创建视图
create view with union all using select not working
我在下面的查询中收到错误 ORA-00979: not a GROUP BY expression
并且逻辑上它不起作用。
通常逻辑应该是每个 FUND_ISIN
检查 member_descr
的值。如果对于 FUND_ISIN
,member_descr != 'O'
或 member_descr
是 null
,则从 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
我在下面的查询中收到错误 ORA-00979: not a GROUP BY expression
并且逻辑上它不起作用。
通常逻辑应该是每个 FUND_ISIN
检查 member_descr
的值。如果对于 FUND_ISIN
,member_descr != 'O'
或 member_descr
是 null
,则从 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