问题描述
对于M_DESCR
字段,我尝试在'C'
时将值设置为altype = 'Cash total'
,在altype = 'Other total'
时我希望将值设置为'O'
,否则应为null
。当我尝试在第一个union all
条件中执行相同的操作时,则字段M_DESCR
的任何操作都没有更改。
我还想在完成所有计算但不知道该怎么做的时候从视图的最后删除字段ALTYPE
。
解决方法
据我了解,您可能正在寻找类似的东西((只有我对您提供的数据集有些怀疑,但可能是我错了)
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,CASE
WHEN allocationassettype = 'Cash total'
THEN
'C'
WHEN allocationassettype = 'Other total'
THEN
'O'
ELSE NULL
END AS MEMBER_DESCR,MEMBER_MARKETVALUE
FROM
(
SELECT
IDENTIFIER,MEMBER_MARKETVALUE,ALLOCATIONASSETTYPE
FROM
IS_TEST
WHERE
ALLOCATIONASSETTYPE != 'Cash'
and MEMBER_IDENTIFIER is not null
UNION ALL
SELECT
IDENTIFIER,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,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
);
,
我看不到所创建视图的任何问题。您只需从选择列表和查看列列表中删除ALLOCATIONASSETTYPE列即可。
在测试案例中,我看不到您所描述的任何值:
**
allocationassettype ='现金总额',当distributionassettype ='其他 总计”
**