如果列包含逗号分隔值,请分别创建一个单独的行

时间:2014-12-16 11:10:24

标签: sql sql-server sql-server-2008

我已经在这里问了一个question但是它有点改变了一个

FirstName          LastName                     PayScale
 -----------        ------------                ---------------
Alice,Lisa         simons,Jack                        100000

我希望看到这样的结果

   FirstName          LastName                     PayScale
  -----------        ------------                ---------------
Alice              simons                        100000
Lisa               Jack                          100000

firstname的第一个值和lastname的第一个值将成为一个单独的行。总之要用逗号分隔多列

1 个答案:

答案 0 :(得分:1)

正如GarethD所说,您应该规范化您的数据库。这只是一个解决方法

create table #test (FirstName varchar(100),LastName varchar(100),PayScale int)

insert #test values
('Alice,Lisa','simons,Jack',100000)

SELECT FirstName,
       LastName,
       b.PayScale
FROM   (SELECT Split.a.value('.', 'VARCHAR(100)')FirstName,
               PayScale,
               Row_number()
                 OVER(
                   ORDER BY (SELECT 1))          rn
        FROM   (SELECT PayScale,
                       Cast ('<M>' + Replace(FirstName, ',', '</M><M>')
                             + '</M>' AS XML) AS FirstName
                FROM   #test) AS A
               CROSS APPLY FirstName.nodes ('/M') AS Split(a))fst
       JOIN (SELECT Split.a.value('.', 'VARCHAR(100)') LastName,
                    PayScale,
                    Row_number()
                      OVER(
                        ORDER BY (SELECT 1))           rn
             FROM   (SELECT PayScale,
                            Cast ('<M>' + Replace(LastName, ',', '</M><M>')
                                  + '</M>' AS XML) AS LastName
                     FROM   #test) AS A
                    CROSS APPLY LastName.nodes ('/M') AS Split(a)) b
         ON fst.rn = b.rn