我有一个表,其中包含逗号分隔的值。我需要将这些值拆分到各自的列中。
这些值可以是从 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
最佳答案
两个选项,一个为空,另一个不为空
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/