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

如何在SQL Server中将逗号分隔值拆分至对应列?

问题分析与解决

你的核心问题是错误地用行号(ROW_NUMBER())作为透视的列标识,导致拆分出的数字无法对应到同名的目标列。原查询里生成的Col是拆分后的行顺序编号(1、2、3...),但你需要的是把每个拆分出的数字直接映射到同名列,比如拆分出的3要放到[3]列。

修正后的SQL查询

SELECT MemberTransId,
    AccessZone,
    ISNULL([1], '') AS [1],
    ISNULL([2], '') AS [2],
    ISNULL([3], '') AS [3],
    ISNULL([4], '') AS [4],
    ISNULL([5], '') AS [5],
    ISNULL([6], '') AS [6],
    ISNULL([7], '') AS [7],
    ISNULL([8], '') AS [8],
    ISNULL([9], '') AS [9],
    ISNULL([10], '') AS [10]
FROM (
    SELECT MemberTransId,
        AccessZone,
        Split.value AS Col,  -- 直接用拆分出的数字作为透视列的标识
        Split.value
    FROM dbo.tbl_MemberTransaction AS Emp
    CROSS APPLY String_split(AccessZone, ',') AS Split
    -- 可选:过滤掉1-10以外的无效数值
    WHERE ISNUMERIC(Split.value) = 1 AND CAST(Split.value AS INT) BETWEEN 1 AND 10
) AS tbl
PIVOT (
    MAX(Value) FOR Col IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10])
) AS Pvt

关键修正点

  • 子查询中Col直接使用Split.value,让拆分出的数字和目标列名一一对应,这是解决错位的核心
  • 移除了多余的ROW_NUMBER()逻辑,它是导致列映射错误的根源
  • 增加可选的WHERE子句,过滤掉不符合1-10范围的数值,避免无效数据干扰
  • 删掉了原查询中多余的[11]列(根据你描述的数值范围无需保留)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:15:44