基于指定条件获取行值的T-SQL实现请求
T-SQL实现根据关联ID获取对应产品ID的需求
没问题,我来帮你搞定这个T-SQL需求!这个场景属于典型的自关联查询,我们可以通过表自连接结合COALESCE函数轻松实现逻辑判断。
完善后的完整脚本
declare @t table (id int, invoice_id int, product_id int, invoice_line_id_link int); insert into @t values (53,10,383,0), (54,10,344,53), (55,10,920,53), (57,10,384,0), (58,10,359,57), (59,10,242,57), (60,10,284,0); select t.id, t.invoice_id, t.product_id, t.invoice_line_id_link, -- 核心逻辑:当link为0时取当前行product_id,否则取关联行的product_id COALESCE(t_link.product_id, t.product_id) as desiredoutput from @t t left join @t t_link on t.invoice_line_id_link = t_link.id order by t.id;
逻辑说明
- 自连接关联:用
LEFT JOIN @t t_link on t.invoice_line_id_link = t_link.id将原表与自身关联,关联条件是当前行的invoice_line_id_link匹配关联表的id字段。 - COALESCE函数取值:
- 当
invoice_line_id_link为0时,关联表找不到id=0的记录,t_link.product_id会返回NULL,此时COALESCE会取当前行的t.product_id。 - 当
invoice_line_id_link不为0时,关联表能匹配到对应id的行,直接取t_link.product_id即可。
- 当
预期输出结果
运行脚本后,desiredoutput列的结果如下:
- id=53:383(link为0,取自身产品ID)
- id=54:383(link=53,匹配id=53的产品ID)
- id=55:383(link=53,匹配id=53的产品ID)
- id=57:384(link为0,取自身产品ID)
- id=58:384(link=57,匹配id=57的产品ID)
- id=59:384(link=57,匹配id=57的产品ID)
- id=60:284(link为0,取自身产品ID)
内容的提问来源于stack exchange,提问作者Kiddo Gabaldon
相关产品推荐
相关产品推荐

