You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表连接时Concept_ID_DFF为NULL,如何实现关联并得到预期结果?

解决Project表NULL值关联匹配缺失记录问题

问题说明

关联Proposal(Financial_Repository.FACT_IM_TPE_PROPOSL_COST)与Project(Financial_Repository.DIM_PRJ_HISTORY)表时,因Project表中Concept_ID_DFF为NULL的行无法通过原关联条件匹配,导致缺失对应日期2021-09-20 18:53:56.003的3条记录。需将该NULL值视为300000005876166,使查询结果包含23241、23241.0001、23241.0002三类~Project值。

数据表示例

Project表(DIM_PRJ_HISTORY)数据

SRC_START_DTTMConcept_ID_DFF
2021-09-20 18:53:56.003NULL
2021-09-20 18:54:22.150300000005876166
2021-09-23 14:02:49.000300000005876166

Proposal表(FACT_IM_TPE_PROPOSL_COST)数据

CST_AMTConcept_ID_DFF
1262450.00300000005876166
1510546.00300000005876166
12874.00300000005876166

当前SQL语句

SELECT  CONVERT(bigint, FACT_IM_TPE_PROPOSL_COST.CONCEPT_MASTER_DSID) AS [~Proposal]
    ,   FACT_IM_TPE_PROPOSL_COST.VERSION AS [Cost Version]
    ,   DATEFROMPARTS(TRY_CONVERT(int, FACT_IM_TPE_PROPOSL_COST.CST_YEAR), 1, 1) AS [~Reporting Period]
    ,   DIM_PRJ.SRC_START_DTTM
    ,   DIM_PRJ.PRJ_STAT_CD
    ,   DIM_PRJ.CONCEPT_ID_DFF
    ,   DIM_PRJ.DWID
    ,   CONVERT(float, (DIM_PRJ.DWID + (ROW_NUMBER() OVER (PARTITION BY DIM_PRJ.DWID, FACT_IM_TPE_PROPOSL_COST.CST_AMT  ORDER BY DIM_PRJ.SRC_END_DTTM, TRY_CONVERT(bigint, DIM_PRJ.PRJ_STAT_CD))*.0001)) - .0001) AS [~Project]
    ,   TRY_CONVERT(int, FACT_IM_TPE_PROPOSL_COST.CST_YEAR) AS [Cost Year]
    ,   FACT_IM_TPE_PROPOSL_COST.CST_AMT AS [Proposed Cost] 
FROM Financial_Repository.FACT_IM_TPE_PROPOSL_COST
    LEFT OUTER JOIN Financial_Repository.DIM_PRJ_HISTORY DIM_PRJ
        ON DIM_PRJ.CONCEPT_ID_DFF = FACT_IM_TPE_PROPOSL_COST.CONCEPT_MASTER_DSID
WHERE DIM_PRJ.DWID = '23241' AND [Version] = '1'
ORDER BY [~Project] ASC

修改后的SQL语句

SELECT  CONVERT(bigint, FACT_IM_TPE_PROPOSL_COST.CONCEPT_MASTER_DSID) AS [~Proposal]
    ,   FACT_IM_TPE_PROPOSL_COST.VERSION AS [Cost Version]
    ,   DATEFROMPARTS(TRY_CONVERT(int, FACT_IM_TPE_PROPOSL_COST.CST_YEAR), 1, 1) AS [~Reporting Period]
    ,   DIM_PRJ.SRC_START_DTTM
    ,   DIM_PRJ.PRJ_STAT_CD
    ,   DIM_PRJ.CONCEPT_ID_DFF
    ,   DIM_PRJ.DWID
    ,   CONVERT(float, (DIM_PRJ.DWID + (ROW_NUMBER() OVER (PARTITION BY DIM_PRJ.DWID, FACT_IM_TPE_PROPOSL_COST.CST_AMT  ORDER BY DIM_PRJ.SRC_END_DTTM, TRY_CONVERT(bigint, DIM_PRJ.PRJ_STAT_CD))*.0001)) - .0001) AS [~Project]
    ,   TRY_CONVERT(int, FACT_IM_TPE_PROPOSL_COST.CST_YEAR) AS [Cost Year]
    ,   FACT_IM_TPE_PROPOSL_COST.CST_AMT AS [Proposed Cost] 
FROM Financial_Repository.FACT_IM_TPE_PROPOSL_COST
    LEFT OUTER JOIN Financial_Repository.DIM_PRJ_HISTORY DIM_PRJ
        -- 将NULL值替换为指定的Concept_ID_DFF值,实现匹配
        ON ISNULL(DIM_PRJ.CONCEPT_ID_DFF, 300000005876166) = FACT_IM_TPE_PROPOSL_COST.CONCEPT_MASTER_DSID
WHERE DIM_PRJ.DWID = '23241' AND [Version] = '1'
ORDER BY [~Project] ASC

修改说明

  • 在JOIN关联条件中,使用ISNULL()函数将Project表(DIM_PRJ_HISTORY)中Concept_ID_DFF的NULL值替换为目标值300000005876166,确保其能匹配到Proposal表的对应记录。
  • 保留原有的LEFT OUTER JOIN逻辑,保证所有符合条件的Proposal记录都能被查询到,同时包含Project表中NULL值对应的行。

内容的提问来源于stack exchange,提问作者Vince Mack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:25:16