【问题标题】:Recursive CTE- Gives me dupes of 3 rows递归 CTE- 给我 3 行的欺骗
【发布时间】:2023-02-07 03:49:17
【问题描述】:

我试图找到一个组帐户并使用 CTE 和递归 CTE 填充其子帐户数量和市场价值的聚合。它给了我 3 次正确的结果。不确定我在这里遗漏了什么。

设想: 例子 复合账户 CMP_1 包含以下账户成员资格。 DIM_ACCOUNT_CONSTITUENT PARENT_ACCT_CD CHILD_ACCT_CD CMP_1 FND_A CMP_1 FND_B CMP_1 FND_C 截至 2022 年 11 月 13 日,所有数据来源的每个账户的持有量如下所示。 FCT_POSITION_SECURITY_LEVEL SERVICE_ID POSITION_DATE ACCT_CD SEC_ID LONG_SHT_CD STRATEGY_ID QTY 1111 2022 年 11 月 13 日 FND_A 101 L ~NA~ 1000 1111 11/13/2022 FND_A 201 S ~NA~ 2000 1111 2022 年 11 月 13 日 FND_A 301 L ~NA~ 3000 1111 11/13/2022 FND_B 201 L ~NA~ 2000 1111 11/13/2022 FND_B 301 L ~NA~ 3000 1111 11/13/2022 FND_C 101 L ~NA~ 1000 1111 2022 年 11 月 13 日 FND_D 401 S ~NA~ 4000 2222 11/13/2022 FND_A 401 L ~NA~ 4000 2222 11/13/2022 FND_A 501 S ~NA~ 5000 2222 11/13/2022 FND_A 601 L ~NA~ 6000 2222 11/13/2022 FND_C 401 L ~NA~ 4000 2222 11/13/2022 FND_D 501 S ~NA~ 5000 应用聚合时,将为复合帐户创建以下新数据。请注意,聚合基于头寸业务键 POSITION_ID,即 POSITION_DATE、ACCT_CD、SEC_ID、LONG_SHT_CD 和 STRATEGY_ID。此示例中未显示跨任何 FCT_POSITION_SECURITY_LEVEL 扩展 (_EXT) 表的聚合。聚合将以相同的方式工作。 SERVICE_ID POSITION_DATE ACCT_CD SEC_ID LONG_SHT_CD STRATEGY_ID QTY 1111 11/13/2022 CMP_1 101 L ~NA~ 2000 1111 11/13/2022 CMP_1 201 L ~NA~ 2000 1111 11/13/2022 CMP_1 201 S ~NA~ 2000 1111 11/13/2022 CMP_1 301 L ~NA~ 6000 1111 11/13/2022 CMP_1 401 S ~NA~ 4000 2222 11/13/2022 CMP_1 401 L ~NA~ 8000 2222 11/13/2022 CMP_1 501 S ~NA~ 10000 2222 11/13/2022 CMP_1 601 L ~NA~ 6000

询问:

WITH CTE AS (
SELECT
PS.SERVICE_ID,
PS.POSITION_DATE,
PARENT_ACCT_CD AS ACCT_CD,
PS.SEC_ID,
PS.LONG_SHT_CD,
PS.STRATEGY_ID,
PS.QTY,
PS.MKT_VAL
FROM
DIM_ACCOUNT_CONSTITUENT AC
INNER JOIN
FCT_POSITION_SECURITY_LEVEL PS
ON
AC.CHILD_ACCT_CD = PS.ACCT_CD
WHERE
AC.PARENT_ACCT_CD = 'CMP_1' AND
PS.POSITION_DATE =CURRENT_DATE()
),
REC_CTE AS (
SELECT
SERVICE_ID,
POSITION_DATE,
ACCT_CD,
SEC_ID,
LONG_SHT_CD,
STRATEGY_ID,
QTY,
MKT_VAL
FROM
CTE
UNION ALL
SELECT
CTE.SERVICE_ID,
CTE.POSITION_DATE,
DIM_ACCOUNT_CONSTITUENT.PARENT_ACCT_CD AS ACCT_CD,
CTE.SEC_ID,
CTE.LONG_SHT_CD,
CTE.STRATEGY_ID,
CTE.QTY,
CTE.MKT_VAL
FROM
CTE
INNER JOIN
DIM_ACCOUNT_CONSTITUENT
ON
CTE.ACCT_CD = DIM_ACCOUNT_CONSTITUENT.CHILD_ACCT_CD
WHERE
DIM_ACCOUNT_CONSTITUENT.PARENT_ACCT_CD <> 'CMP_1'
AND CTE.POSITION_DATE=current_date()
)
SELECT *
FROM REC_CTE;

【问题讨论】:

    标签: common-table-expression recursive-cte


    【解决方案1】:

    我想我发现了问题,在我的查询中,我有一个包含前行的维度表。添加一个“where”子句过滤器将修复它。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 2023-03-09
      • 2019-06-05
      相关资源
      最近更新 更多