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

SQL实现同表VLOOKUP关联另一表获取card_number

解决方案

你的问题核心是posting_code='gcs'的行需要通过breakdown_link关联同表的gsp记录,再用该记录的folio_number去匹配argcloy_h的card_number,而不是直接用自身的folio_number关联。

可以通过自连接gbfol_det表来实现这个逻辑,先找到gcs对应的gsp行,再关联argcloy_h获取卡号:

SELECT 
    '[dbo].[gbfol_det]' AS TABLE_NAME,
    det.folio_number,
    det.breakdown_link,
    det.posting_code,
    '[dbo].[argcloy_h]' AS TABLE_NAME,
    COALESCE(gc.card_number, gsp_gc.card_number) AS card_number
FROM gbfol_det det
-- 常规关联:用自身folio_number匹配card_number
LEFT JOIN argcloy_h gc ON det.folio_number = gc.folio_number
-- 自连接找到gcs对应的gsp记录
LEFT JOIN gbfol_det gsp_det 
    ON det.posting_code = 'gcs' 
    AND det.breakdown_link = gsp_det.folio_number 
    AND gsp_det.posting_code = 'gsp'
-- 用gsp记录的folio_number匹配card_number
LEFT JOIN argcloy_h gsp_gc ON gsp_det.folio_number = gsp_gc.folio_number

逻辑说明:

  • 第一个LEFT JOIN处理普通行(非gcs)的card_number匹配,用自身的folio_number关联argcloy_h。
  • 自连接gbfol_det gsp_det仅针对posting_code='gcs'的行,通过breakdown_link找到对应的gsp类型记录。
  • 第二个LEFT JOIN argcloy_h gsp_gc用找到的gsp记录的folio_number获取对应的card_number。
  • COALESCE函数优先取常规关联的card_number,当常规关联为NULL(即gcs行)时,取gsp关联得到的card_number。

如果你的argcloy_h表中gsp记录的folio_number一定存在对应的card_number,可以把最后一个LEFT JOIN改成INNER JOIN,但保留LEFT JOIN能保证即使gsp没有对应卡号时,结果仍返回该行(card_number为NULL)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:30:03