sql - 如何在 SQL Server 中将逗号分隔值拆分到各自的列中?

标签 sql sql-server split pivot

我有一个表,其中包含逗号分隔的值。我需要将这些值拆分到各自的列中。

这些值可以是从 1 到 10 的任意数字。

例如,值“1,3,4”应拆分并将 1 放入第一列,将 3 放入第三列,将 4 放入第四列。

我尝试过以下 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],
    ISNULL([11],'') AS [11]
FROM (
    SELECT MemberTransId,
        AccessZone,
        CAST(ROW_NUMBER()OVER
(PARTITION BY MemberTransId ORDER BY MemberTransId) AS VARCHAR) AS Col,Split.value
    FROM dbo.tbl_MemberTransaction AS Emp
    CROSS APPLY String_split(AccessZone,',') AS Split
    ) AS tbl
Pivot (Max(Value) FOR Col IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11])
) AS Pvt

Here is the current output screenshot

最佳答案

两个选项,一个为空,另一个不为空

Declare @YourTable table (MemberTransId int,AccessZone varchar(50))
Insert Into @YourTable values 
 (2,',1,2,3,4')
,(3,',4,5')

-- With NULL values
Select *
 From  (
        Select A.MemberTransId
              ,Col = B.value
              ,Val = B.value
         From  @YourTable A
         Cross Apply string_split(AccessZone,',')B
       ) src
 Pivot ( max(Val) for Col in ([1],[2],[3],[4],[5]) ) pvt


-- Without Null Values
Select MemberTransId
      ,[1] = Isnull([1],'')
      ,[2] = Isnull([2],'')
      ,[3] = Isnull([3],'')
      ,[4] = Isnull([4],'')
      ,[5] = Isnull([5],'')
 From  (
        Select A.MemberTransId
              ,Col = B.value
              ,Val = B.value
         From  @YourTable A
         Cross Apply string_split(AccessZone,',')B
       ) src
 Pivot ( max(Val) for Col in ([1],[2],[3],[4],[5]) ) pvt

关于sql - 如何在 SQL Server 中将逗号分隔值拆分到各自的列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74584419/

相关文章:

SQL明显排列列查询问题

php - 如何在php中保存sql查询的值?

sql - 可选 TOP 子句是否有任何现有的、优雅的模式?

python - 如何拆分从文件中读取的字符串

mysql - SQL 选择不在其他表中并带有附加列检查的项目计数

mysql - 如何在 B 列中查找共享同一 A 列的 2 个值

sql - 使用 SQL 根据特定列中相似单元格的数量对表的行重新排序

sql-server - 无法使用 django-pyodbc-azure 2.1.0.0 连接到 MSSQL

python - 在特定子字符串上拆分字符串并保留它

java - 字符串拆分为字符串数组