将多行合并为一个“memo”nvarchar(max)

时间:2016-06-28 23:02:40

标签: sql sql-server sql-server-2012

2个表1,其他客户使用accno信息

table 1:
file, accno <- nvarchar(50)
t1, 123a
t1, 456a
t1, 789a
t2, 012b
t3, 345c
t3, 678c

我想将表1转移到表2

table 2:
file, accno <- nvarchar(max)
t1, 123a
    456a
    789a
t2, 012b
t3, 345c
    678c

我能做到这一点很简单,但是这需要花费6个小时,因为我在表1中过滤了接近300000条记录

是否有一个sql查询可以让它变得非常快,即使需要5分钟

2 个答案:

答案 0 :(得分:1)

SELECT
    DISTINCT [File]
    ,STUFF(
        (SELECT ',' + accno
        FROM
            TableName it
        WHERE it.[File] = ot.[File]
        FOR XML PATH(''))

        ,1,1,'') AS [Memo]
FROM
    TableName ot

你可以调整这个但是这会创建一个逗号分隔的你的accno列表,我认为你正在寻找什么?您可以修改为在备注字段中使用行结尾而不是逗号。

答案 1 :(得分:0)

k所以事实证明,两端有趣的小发明是回车,我设法通过修改下面的查询来解决这个问题

SELECT
    DISTINCT fileref, stuff(
        (
        Select '; ' + IsNull( D2.viaccno, '' )
        From vi_accno As D2
        Where D2.vifileref = A.FileRef
        For Xml Path(''), type
        ).value('.', 'nvarchar(max)')
        , 1, 2, '') As SelectedComments
FROM
   vtindex a

感谢@Matt的帮助和回应