【问题标题】:Need comma separated value in table in SQL Server 2014 [duplicate]SQL Server 2014中的表中需要逗号分隔值[重复]
【发布时间】:2018-08-08 10:15:18
【问题描述】:

我有一张这样的桌子。

Create table #temp
(
    id int,
    firstname varchar(50),
    lastname varchar(50)
)

insert into #temp (id, firstname, lastname)
select 1,'mit','jain'

insert into #temp (id, firstname, lastname)
select 1,'mit','jain1'

insert into #temp (id, firstname, lastname)
select 1,'mit','jain2'

insert into #temp (id, firstname, lastname)
select 2,'mit','jain3'

insert into #temp (id, firstname, lastname)
select 2,'mit','jain4'

insert into #temp (id, firstname, lastname)
select 1,'mit','jain5'

insert into #temp (id, firstname, lastname)
select 1,'mit','jain6'

我希望表格如下所示

id  firstname  lastname
----------------------------------------------
 1   mit        jain,jain1,jain2,jain5,jain6 
 2   mit        jain2,jain4

我试过如下查询

select  
    id, firstname,
    substring((Select ', '+tc1.lastname AS [text()]
               From #temp tc1
               Inner Join #temp c1 On c1.id = tc1.id
               Where tc1.firstname = c1.firstname
               Order BY tc1.lastname
               For Xml Path('')), 2, 1000) 'LastName1' 
from #temp 
group by id, firstname

但它不起作用。请帮帮我

【问题讨论】:

    标签: sql-server sql-server-2012


    【解决方案1】:

    你是其中的一部分。传统方法是使用STUFF

    SELECT t.id, t.firstname,
           STUFF((SELECT ', ' + sq.lastname
                  FROM #temp sq
                  WHERE sq.id = t.id
                    AND sq.firstname = t.firstname
                  ORDER BY sq.lastname
                  FOR XML PATH('')),1,1,'') AS lastname
    FROM #temp t
    GROUP BY t.id, t.firstname;
    

    关于如何做到这一点已经有很多关于 SO 的答案,但你已经表现出努力。 :)

    【讨论】:

    • inner join不能做吗?
    • @MiteshJain 不,您不能 INNER JOIN 到表达式并引用外部对象。我假设您可以使用CROSS APPLY,但是,这种方法是迄今为止更传统的方法。 Microsoft 在 SQL Server 2017 (STRING_AGG) 中引入了一个函数,该函数也用于SELECT,而不是FROM。在SELECT 中确实是这样做的正确位置,因为它确实是一个聚合。
    • @Larnu 恕我直言,在 SO 中提出问题时预计会付出努力,因此这不应成为不将问题作为重复项关闭的理由。如果您认为这个问题很好,您可以随时投票。事实上,您既可以投票也可以投票结束(就像我刚才所做的那样)。重复并不意味着是一个坏问题。
    • @ZoharPeled 我完全同意,这是意料之中的,问题是,写问题的人经常没有提供他们尝试过的东西(或者他们根本没有提供)。这就是为什么我非常乐意在这里回答 OP,而不是重复投票。 DDL 和INSERT 语句也是很好的补充。 :)
    • 这就是我对这个问题投赞成票的原因 - 这是一个格式良好的 SQL 问题,使用 DDL+DML 作为示例数据,显示了期望的结果和当前的尝试。如果它不是重复的,我会说它和 SQL 问题一样好(至少,就格式和相关数据而言)。
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2014-03-12
    • 2012-10-22
    相关资源
    最近更新 更多