我有一张包含这样数据的表
id | Name | Age
---------------
1 | a,b | 10
我想拆分这些数据,并像这样的
合并到同一个表中id | Name | Age
---------------
1 | a | 10
1 | b | 10
我有分割功能。
答案 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 <> ',';