sql 多行、一行 互转(逗号分割)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:47   2400   0

原始数据:

期望数据:

IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701

 CREATE TABLE temp_20170701 (
 ID INT PRIMARY KEY IDENTITY(1,1),
 NAME  NVARCHAR(50),
 Subjectname NVARCHAR(50),
 Score INT
 )
INSERT dbo.temp_20170701( Name, subjectname, Score )
SELECT 'A','语文','20' UNION
SELECT 'A','数学','30' UNION
SELECT 'A','英语','40' UNION
SELECT 'B','语文','50' UNION
SELECT 'B','数学','60' UNION
SELECT 'B','英语','70' UNION
SELECT 'C','语文','80' UNION
SELECT 'C','数学','90' UNION
SELECT 'C','英语','100' UNION
SELECT 'D','英语','100'
SELECT Name ,Score=STUFF((SELECT ','+CONVERT(NVARCHAR(max),Score) FROM temp_20170701 t1 WHERE t1.NAME=t2.NAME FOR XML PATH('')),1,1,'')
 FROM temp_20170701 t2 GROUP BY t2.NAME

原始数据:

期望数据:

CREATE TABLE temp_20170702 (
ID INT PRIMARY KEY IDENTITY(1,1),
NAME NVARCHAR(50),
Score varchar(100)
)
insert temp_20170702 (Name,Score)
select 'A','30,40,20' union
select 'B','60,70,50' union
select 'C','90,100,80' union
select 'D','100'

select a.NAME,b.value as Score from (
select *,s=CONVERT(xml,'<root><v>'+REPLACE(Score,',','</v><v>')+'</v></root>') from temp_20170702 
 ) a outer apply 
(select value=n.s.value('.','varchar(100)') from a.s.nodes('/root/v') n(s)) b

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP