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
相关产品推荐
相关产品推荐

