SQL Server使用FOR XML PATH拼接多列新增LoanProduct_Mix字段方法
解决方案
你只需要新增一个针对贷款类字段的CROSS APPLY构造对应的XML结构,再新增对应字段的拼接逻辑即可,另外注意原代码中的@tbl是笔误,需替换为实际的表名Products,同时原XQuery的非空判断要调整为非0判断,才符合你给出的预期输出:
完整修改后的查询代码:
SELECT Customerkey, processdate, -- 原有逻辑:字段值逗号分隔 REPLACE(x.query('data(/root/*)').value('text()[1]', 'VARCHAR(100)'), SPACE(1), ',') AS Product_Mix, -- 原有逻辑:非0字段名用+拼接,修正判断条件为值不等于0 REPLACE(x.query('for $x in /root/*[./text()!="0"] return local-name($x)').value('text()[1]', 'VARCHAR(100)'), SPACE(1), '+') AS Product_Mix_Expanded, -- 新增贷款类字段拼接,逻辑和上面保持一致 REPLACE(loan_x.query('for $x in /root/*[./text()!="0"] return local-name($x)').value('text()[1]', 'VARCHAR(100)'), SPACE(1), '+') AS LoanProduct_Mix FROM Products -- 原有处理普通产品字段的CROSS APPLY CROSS APPLY (SELECT CCcount, CHKCount, SACount FOR XML PATH(''), TYPE, ROOT('root')) AS t(x) -- 新增处理贷款类字段的CROSS APPLY CROSS APPLY (SELECT VEHCount, LoanCount, MortCount FOR XML PATH(''), TYPE, ROOT('root')) AS loan_t(loan_x);
输出结果和预期完全一致:
| CustomerKey | processdate | Product_Mix | Product_Mix_Expanded | LoanProduct_Mix |
|---|---|---|---|---|
| 101 | 2021-05-01 | 12,3,5 | CCcount+CHKCount+SACount | VEHCount+LoanCount+MortCount |
| 102 | 2021-02-03 | 1,3,1 | CCcount+CHKCount+SACount | |
| 103 | 2019-04-12 | 4,0,2 | CCcount+SACount | LoanCount+MortCount |
内容的提问来源于stack exchange,提问作者Anu
相关产品推荐
相关产品推荐

