加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何将多行作为字符串获得一行?

发布时间:2020-12-12 16:42:19 所属栏目:MsSql教程 来源:网络整理
导读:我有两个表“一对多”: 表格1 ID Name1 Abe2 David3 Orly 表2 ID email1 a@zz.com1 ab@zz.com1 abe@zz.com2 dav@zz.com2 d@zz.com3 orly@zz.com3 o@zz.com 我需要一个这样的输出: 1 Abe a@zz.com,ab@zz.com,abe@zz.com2 David dav@zz.com,d@zz.com3 Orly or
我有两个表“一对多”:

表格1

ID    Name
1     Abe
2     David
3     Orly

表2

ID    email
1     a@zz.com
1     ab@zz.com
1     abe@zz.com
2     dav@zz.com
2     d@zz.com
3     orly@zz.com
3     o@zz.com

我需要一个这样的输出:

1 Abe a@zz.com,ab@zz.com,abe@zz.com
2 David dav@zz.com,d@zz.com
3 Orly orly@zz.com,o@zz.com

我知道这不行,因为内部的SELECT不是一个单一的字符串:

SELECT 
    ID,Name,(SELECT email FROM Table2  WHERE Table2.ID = Table1.ID) AS emails 
FROM Table1

我试图申请:

DECLARE @emails VARCHAR(999)

SELECT [ID],[Name],(SELECT @emails = COALESCE(@emails + ',','') + [email] 
      FROM Table2) AS 'emails' 
FROM Table1

但没有运气.

应该如何解决?

谢谢.

解决方法

实现这一点的最简单的方法之一是结合For XML Path和STUFF,如下所示:
SELECT
    ID,Emails = STUFF((
        SELECT ',' + Email FROM Table2 WHERE Table2.ID = Table1.ID
        FOR XML PATH ('')),1,2,'')
FROM Table1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读