如何在SQL SERVER 2008中根据给定条件将多行合并为一个单列字段

5
我正在使用SQL Server 2008,需要实现以下内容:-> 我得到了以下结果:

表格:- SQL查询..............

 acc_no           name
   001-000001       John
   001-000001       Bob
   001-000001       James
   001-000002       Sam
   001-000002       Bin 
   001-000002       Dus

因此,情况是这样的:多个人可以拥有相同的账号。所以我想要以下结果:
 acc_no           name
   001-000001       John,Bob,James
   001-000002       Sam,Bin,Dus

还有其他条件可以显示结果,但我在显示这个格式时卡住了。

3个回答

9
如何尝试以下内容:
DECLARE @Table TABLE(
        acc_no VARCHAR(50),
        name VARCHAR(50)
)
INSERT INTO @Table (acc_no,name) SELECT '001-000001', 'John'
INSERT INTO @Table (acc_no,name) SELECT '001-000001', 'Bob'
INSERT INTO @Table (acc_no,name) SELECT '001-000001', 'James'
INSERT INTO @Table (acc_no,name) SELECT '001-000002', 'Sam'
INSERT INTO @Table (acc_no,name) SELECT '001-000002', 'Bin'
INSERT INTO @Table (acc_no,name) SELECT '001-000002', 'Dus'

--Concat
SELECT  t.acc_no,
        stuff(
                (
                    select  ',' + t1.name
                    from    @Table t1
                    where   t1.acc_no = t.acc_no
                    order by t1.name
                    for xml path('')
                ),1,1,'') Concats
FROM    @Table t
GROUP BY t.acc_no

SQL Fiddle DEMO


4
尝试这个 -
DECLARE @temp TABLE
(
      ID VARCHAR(20)
    , Name VARCHAR(50)
)

INSERT INTO @temp (ID, Name)
VALUES 
    ('001-000001', 'John'),
    ('001-000001', 'Bob'),
    ('001-000001', 'James'),
    ('001-000002', 'Sam'),
    ('001-000002', 'Bin'),
    ('001-000002', 'Dus')

SELECT t.ID, STUFF((
    SELECT ', ' + t2.Name
    FROM @temp t2
    WHERE t.ID = t2.ID
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
FROM (
    SELECT DISTINCT ID 
    FROM @temp
) t

输出 -

ID                   
-------------------- -------------------
001-000001           John, Bob, James
001-000002           Sam, Bin, Dus

4
 select acc_no,stuff((SELECT distinct ', ' + cast(name as varchar(10))
       FROM yourtable t2
       where t2.acc_no = t1.acc_no
       FOR XML PATH('')),1,1,'') 
       from yourtable t1
       group by acc_no

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接