测试数据
对name字段中的数据做处理
想要的效果
先写一个字符串分割的函数
CREATE FUNCTION dbo.split (
@String VARCHAR(MAX),
@Delimiter VARCHAR(MAX)
) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS
BEGIN
DECLARE @idx INT=1
DECLARE @slice VARCHAR(MAX)
IF LEN(@String) < 1 OR LEN(ISNULL(@String,'')) = 0
RETURN
WHILE @idx != 0
BEGIN
SET @idx = CHARINDEX(@Delimiter,@String)
IF @idx != 0
SET @slice = LEFT(@String,@idx - 1)
ELSE
SET @slice = @String
IF LEN(@slice) > 0
INSERT INTO @temptable(items) VALUES(@slice)
SET @String = RIGHT (@String, LEN(@String) - @idx)
IF LEN(@String) = 0
BREAK
END
RETURN
END
GO
然后需要先将name列转行,如下图
再利用写好的函数进行字符串分割 sql如下
SELECT
*
FROM
dbo.split (
(
SELECT
STUFF(
(
SELECT
'_' + name
FROM
test_name FOR xml path ('')
),
1,
1,
''
)
),
'_'
);
最终效果如下显示