Split one column into multiple rows

前端 未结 4 1152
离开以前
离开以前 2020-11-30 10:33

Can anyone tell me how to accomplish this? A column in my table, in some instances, contains comma separated values. If it does, I need to create new rows for these values

4条回答
  •  青春惊慌失措
    2020-11-30 11:14

    Another one of many string splitting functions out there. This is sort of similar to @Byron Whitlock's answer but instead of using master..spt_values uses a cte to generate a numbers table. SQL Server 2005 onwards.

    CREATE TABLE dbo.Table1 
    (
        Col1        CHAR(1),
        Col2        CHAR(1),
        Col3        CHAR(1),
        Col4        VARCHAR(50)
    )
    GO
    
    INSERT INTO dbo.Table1 VALUES ('A','B','C','1,2,3')
    GO
    
    SELECT * FROM dbo.Table1;
    GO
    
    WITH
    L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
    L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
    L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
    L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),
    Numbers AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L3)
    SELECT  Col1, Col2, Col3,        
            LTRIM(RTRIM(SUBSTRING(valueTable.Col4, nums.n, charindex(N',', valueTable.Col4 + N',', nums.n) - nums.n))) AS [Value]
    FROM   Numbers AS nums INNER JOIN dbo.Table1 AS valueTable ON nums.n <= CONVERT(int, LEN(valueTable.Col4)) AND SUBSTRING(N',' + valueTable.Col4, n, 1) = N','
    

提交回复
热议问题