使用条件时的案例,Oracle View无法正常工作

西蒙兹:

我有下面的表IS_TEST:

CREATE TABLE
IS_TEST
(
    IMPORT_DATE DATE,
    EFFECTIVE_DATE DATE,
    IDENTIFIER VARCHAR2(100),
    FUND_QUOTE VARCHAR2(50),
    FUND_QUOTE_CRNY VARCHAR2(50),
    FUND_QUOTE_DATE DATE,
    MEMBER_IDENTIFIER VARCHAR2(100),
    MEMBER_DESCR VARCHAR2(100),
    MEMBER_QUOTE_CRNY VARCHAR2(50),
    MEMBER_QTY VARCHAR2(50),
    MEMBER_QTY_TYPE VARCHAR2(50),
    MEMBER_RATIO NUMBER(19,8),
    MEMBER_MARKETVALUE NUMBER(19,8),
    FORCE_FLAG VARCHAR2(10),
    ALLOCATIONASSETTYPE VARCHAR2(100)
);

下面是我创建的视图:

CREATE OR REPLACE VIEW
    IS_ID
    (
        IDENTIFIER,
        IMPORT_DATE,
        EFFECTIVE_DATE,      
        FUND_QUOTE,
        FUND_QUOTE_CRNY,
        FUND_QUOTE_DATE,
        MEMBER_IDENTIFIER,        
        MEMBER_QUOTE_CRNY,
        MEMBER_QTY,
        MEMBER_QTY_TYPE,
        FORCE_FLAG,
        MEMBER_DESCR,
        MEMBER_RATIO,
        MEMBER_MARKETVALUE,        
        ALLOCATIONASSETTYPE
    ) AS
SELECT
        IDENTIFIER,
        IMPORT_DATE,
        EFFECTIVE_DATE,      
        FUND_QUOTE,
        FUND_QUOTE_CRNY,
        FUND_QUOTE_DATE,
        MEMBER_IDENTIFIER,
        MEMBER_QUOTE_CRNY,
        MEMBER_QTY,
        MEMBER_QTY_TYPE,
        FORCE_FLAG,
        CASE 
             WHEN allocationassettype = 'Cash total'
             THEN
             'C'
             WHEN allocationassettype = 'Other total'
             THEN
             'O'
             ELSE NULL
        END AS MEMBER_DESCR,
        MEMBER_RATIO,
        MEMBER_MARKETVALUE,        
        ALLOCATIONASSETTYPE
FROM
    IS_TEST
WHERE
    ALLOCATIONASSETTYPE != 'Cash'
and MEMBER_IDENTIFIER is not null
UNION ALL
SELECT
    IDENTIFIER,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_ratio
            ELSE 0
        END),
    SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_marketvalue
            ELSE 0
        END),
    'Cash total'    
FROM
    IS_TEST
GROUP BY
    IDENTIFIER, MEMBER_DESCR
UNION ALL
SELECT
    IDENTIFIER,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
   NULL,
    100 - SUM(
        CASE
            WHEN MEMBER_IDENTIFIER IS NOT NULL
            THEN member_ratio
            ELSE 0
        END) - SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_ratio
            ELSE 0
        END),
    SUM(member_marketvalue) - SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_marketvalue
            ELSE 0
        END) - SUM(
        CASE
            WHEN MEMBER_IDENTIFIER IS NOT NULL
            THEN member_marketvalue
            ELSE 0
        END),
    'Other total'    
FROM
    IS_TEST
GROUP BY
    IDENTIFIER;

现在,对于MEMBER_DESCR字段,我试图将值设置为'C'when allocationassettype = 'Cash total'allocationassettype = 'Other total'那时我希望将value设置为'O'其他null当我在第一个union all条件下尝试执行相同操作时,则对于字段没有任何更改MEMBER_DESCR

我还想ALLOCATIONASSETTYPE在完成所有计算但不知道该怎么做时在最后从视图中删除字段

Sujitmohanty30:

据我了解,也许您正在寻找类似的东西((我只是对您提供的数据集有些怀疑,但可能是我错了)

CREATE OR REPLACE VIEW
    IS_ID
    (
        IDENTIFIER,
        IMPORT_DATE,
        EFFECTIVE_DATE,      
        FUND_QUOTE,
        FUND_QUOTE_CRNY,
        FUND_QUOTE_DATE,
        MEMBER_IDENTIFIER,        
        MEMBER_QUOTE_CRNY,
        MEMBER_QTY,
        MEMBER_QTY_TYPE,
        FORCE_FLAG,
        MEMBER_DESCR,
        MEMBER_RATIO,
        MEMBER_MARKETVALUE
    ) AS
SELECT
  IDENTIFIER,
  IMPORT_DATE,
  EFFECTIVE_DATE,      
  FUND_QUOTE,
  FUND_QUOTE_CRNY,
  FUND_QUOTE_DATE,
  MEMBER_IDENTIFIER,
  MEMBER_QUOTE_CRNY,
  MEMBER_QTY,
  MEMBER_QTY_TYPE,
  FORCE_FLAG,
  CASE 
       WHEN allocationassettype = 'Cash total'
       THEN
       'C'
       WHEN allocationassettype = 'Other total'
       THEN
       'O'
       ELSE NULL
  END AS MEMBER_DESCR,
  MEMBER_RATIO,
  MEMBER_MARKETVALUE        
FROM
(
SELECT
    IDENTIFIER,
    IMPORT_DATE,
    EFFECTIVE_DATE,      
    FUND_QUOTE,
    FUND_QUOTE_CRNY,
    FUND_QUOTE_DATE,
    MEMBER_IDENTIFIER,
    MEMBER_QUOTE_CRNY,
    MEMBER_QTY,
    MEMBER_QTY_TYPE,
    FORCE_FLAG,
    MEMBER_DESCR,
    MEMBER_RATIO,
    MEMBER_MARKETVALUE,        
    ALLOCATIONASSETTYPE
FROM
    IS_TEST
WHERE
    ALLOCATIONASSETTYPE != 'Cash'
and MEMBER_IDENTIFIER is not null
UNION ALL
SELECT
    IDENTIFIER,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_ratio
            ELSE 0
        END),
    SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_marketvalue
            ELSE 0
        END),
    'Cash total'    
FROM
    IS_TEST
GROUP BY
    IDENTIFIER, MEMBER_DESCR
UNION ALL
SELECT
    IDENTIFIER,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
   NULL,
    100 - SUM(
        CASE
            WHEN MEMBER_IDENTIFIER IS NOT NULL
            THEN member_ratio
            ELSE 0
        END) - SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_ratio
            ELSE 0
        END),
    SUM(member_marketvalue) - SUM(
        CASE
            WHEN allocationassettype = 'Cash'
            THEN member_marketvalue
            ELSE 0
        END) - SUM(
        CASE
            WHEN MEMBER_IDENTIFIER IS NOT NULL
            THEN member_marketvalue
            ELSE 0
        END),
    'Other total'    
FROM
    IS_TEST
GROUP BY
    IDENTIFIER
);

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章