如何将拆分数据合并到同一个表中?

时间:2014-06-28 09:33:22

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

我有一张包含这样数据的表

id | Name | Age
---------------
 1 | a,b  | 10

我想拆分这些数据,并像这样的

合并到同一个表中
id | Name | Age
---------------
 1 | a    | 10
 1 | b    | 10 

我有分割功能。

2 个答案:

答案 0 :(得分:1)

测试数据

DECLARE @TABLE TABLE(id INT, Name VARCHAR(10), Age INT)
INSERT INTO @TABLE VALUES
 (1 ,'a',10), (1 ,'b',10),
 (2 ,'d',20), (2 ,'f',20)

查询

 SELECT t.ID
        ,STUFF(( SELECT ',' + Name
                 FROM @TABLE
                 WHERE ID = t.ID AND Age = t.Age
                 FOR XML PATH(''),TYPE)
                 .value('.','NVARCHAR(MAX)'),1,1,'') AS Name
       ,t.Age

FROM @TABLE t
GROUP BY t.id, t.Age

结果

╔════╦══════╦═════╗
║ ID ║ Name ║ Age ║
╠════╬══════╬═════╣
║  1 ║ a,b  ║  10 ║
║  2 ║ d,f  ║  20 ║
╚════╩══════╩═════╝

答案 1 :(得分:1)

在我看来,OP已将数据连接起来并需要将其拆分。这是一种方法(小提琴:http://sqlfiddle.com/#!3/6b2a1/15

WITH cteSplitCol
AS
(
  SELECT  id,
          Name,
          Age,
          SUBSTRING(Name, 1, 1) AS Character,
          1 AS CharPos,
          MAX(LEN(Name)) OVER () AS MaxLen
  FROM    Table1

  UNION ALL

  SELECT  id,
          Name,
          Age,
          SUBSTRING(Name, CharPos + 1, 1) AS Character,
          CharPos + 1,
          MaxLen
  FROM    cteSplitCol
  WHERE   CharPos + 1 <= MaxLen
)

SELECT  id,
        Character AS Name,
        Age
FROM    cteSplitCol
WHERE   Character <> ',';