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

SQL Server中如何拼接多列并去除相邻重复值?

SQL Server 多列拼接并去除相邻重复值

针对你的需求,我们可以通过逐列判断当前列与前一列是否重复,只保留非重复的列值来实现目标效果。核心思路是用CASE语句对比相邻列,仅当当前列值与前一列不同(且非空)时,才将其加入拼接结果。

以下是适配你数据的SQL语句:

SELECT
    ISNULL(Tier1, '')
    + CASE WHEN ISNULL(Tier2, '') <> ISNULL(Tier1, '') THEN '|' + ISNULL(Tier2, '') ELSE '' END
    + CASE WHEN ISNULL(Tier3, '') <> ISNULL(Tier2, '') THEN '|' + ISNULL(Tier3, '') ELSE '' END
    + CASE WHEN ISNULL(Tier4, '') <> ISNULL(Tier3, '') THEN '|' + ISNULL(Tier4, '') ELSE '' END
    + CASE WHEN ISNULL(Tier5, '') <> ISNULL(Tier4, '') THEN '|' + ISNULL(Tier5, '') ELSE '' END
    + CASE WHEN ISNULL(Tier6, '') <> ISNULL(Tier5, '') THEN '|' + ISNULL(Tier6, '') ELSE '' END AS Result
FROM table1

逻辑说明:

  • 首先以Tier1作为拼接起始值,用ISNULL处理空值,避免NULL破坏拼接结果。
  • 后续每一列通过CASE判断:如果当前列值(处理空值后)和前一列值不同,就追加|+当前列值;如果相同或为空,就追加空字符串跳过。
  • 对应你提供的示例数据,Tier2-Tier4和Tier1重复,会被直接跳过;Tier5和Tier4不同,会追加|Property;Tier6和Tier5重复,同样被跳过,最终得到Contract|Property的结果。

如果遇到中间列有空值但后续列有新值的场景,这个逻辑也能正常工作——空值会被自动跳过,后续的新值依然会被追加到结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:04