Link to home
Start Free TrialLog in
Avatar of immtrac
immtrac

asked on

Split comma sperated values to multiple records

I have a table which has columns like: (actual no of columns in table are 15)

P_ID,      C_ID,          PR_ID,      data
-------------------------------------------------
1               2                3           a,b,c,d,f,
2              3                 4            NULL
5              6                 3            L,M,

what I want is create a view which gives me record for each comma separated value, something like this:

1  2    3   a
1  2    3   b
1  2    3   c
1  2    3   d
1  2    3   f
2  3    4  NULL
5  6    3  L
5  6    3  M

I am using SQL 2008. And also have a UDF split function which is
dbo.Split('x,y,z,w',',') and returns a table like

Id      Value
1      x
2      y
3      z
4      w


I would like to make use of this function if possible.

Thanks for your help
ASKER CERTIFIED SOLUTION
Avatar of Scott Pletcher
Scott Pletcher
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Try this

CREATE TABLE #A
(
Col1 INT,
Col2 Varchar(10)
)

INSERT INTO #A VALUES (1,'a,b,c')
INSERT INTO #A VALUES (2, 'd,e')


 Select T.col1, Z.Position, Z.Value
        , Row_Number() Over ( Partition By T.Col1 Order By Z.Position ) As Num
    From #A As T
        Cross Apply dbo.ufnSplit( T.Col2, ',' ) As Z

Open in new window

Avatar of immtrac
immtrac

ASKER

Simple and it worked for me
To insure that the split values list in order, add an ORDER BY:


SELECT
    tn._ID, tn.C_ID, tn.PR_ID,  --...
    d.value
FROM dbo.table_name tn
CROSS APPLY dbo.Split(data, ',') AS d
ORDER BY
    tn._ID,
    d.Id