SQL - 将一列转置为带分隔符的行

时间:2017-03-28 01:48:04

标签: sql sql-server-2012

将一列转置为一行。

我使用以下查询获得了电子邮件地址列表:

select 
    user_login.email_address
from 
    user.login with(nolock)

结果示例如下:

Email
--------------------
abc@helloworld.com    
no_email    
romeo@abc.com.au  
Juliet@abc.com.au

我想要做的是运行查询,转置并将结果作为文本(在结果之间使用分号),因此我可以自动将结果粘贴到如下的电子邮件中:

期望的结果:

abc@helloworld.com; romeo@aboc.com.au; juliet@abc.com.au

我试图理解PIVOT和UNPIVOT函数,但我只是迷失了如何在结果之间插入分号。希望有人能提供帮助。感谢。

2 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server

select top 1
EMAIL = 
 STUFF((    SELECT '; '+ a.email_address AS [text()]  
FROM email_address a 
FOR XML PATH('') 
), 1, 1,'') 
from email_address

答案 1 :(得分:0)

您可以使用STUFF https://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql

https://sqlwhisper.wordpress.com/2013/03/24/stuff-and-for-xml-path-for-string-concatenation/

select distinct sno ,
STUFF((Select ','+Scity
from @Test T1
where T1.sno=T2.sno
FOR XML PATH('')),1,1,'') from @Test T2