根据ID字段列出列中的唯一值

时间:2013-05-14 08:07:00

标签: sql tsql string-concatenation

警告我是新手,如果问题或解释有任何问题,请对不起......

我有一个表'XYZ',其中有一个附件列表(OrigFileName)和一个字段UniqueAttchID,它也在标题表'ABC'上,用于记录链接,以便您可以查询哪些附件与记录相关。

我需要在Header上将UniqueAttchID相等的所有记录的结果添加回标题'ABC'这个名为'udAttch'的字段,这是一个用分隔符格式化的备注字段

这是为了解决我可用的报告功能的限制,因为我只能使用数据库中的实际字段而不是相关表。

当前设置: -

XYZ Table
UniqueAttchID    OrigFileName
----------      -------------
18181818181   |   Filename1
18181818181   |   Filename2
18181818181   |   Filename3
18181818182   |   Filename1
ABC Table - 
Description|Field2|UniqueAttchID|
test item  |test  |18181818181
Test item 2|test2 |18181818182 

期望的结果: -
(XYZ表将保持不变)

ABC Table - 
Description|Field2|UniqueAttchID|udAttch|
test item  |test  |18181818181  |Filename1, Filename2, Filename3|
Test item 2|test2 |18181818182  |Filename1|

我已经尝试过使用COALESCE但是这并没有为每个UniqueAttchID提供单独的记录,只为所有记录提供一条记录,而SELECT DISTINCT只生成了OrigFileName中的第一条记录

然后,我可以生成存储过程以根据需要运行,并在将新文件添加为附件时更新记录。

1 个答案:

答案 0 :(得分:0)

请尝试:

select 
    *, 
    STUFF((SELECT ',' + OrigFileName
       FROM XYZ b WHERE b.UniqueAttchID=a.UniqueAttchID
        FOR XML PATH(''),type).value('.','nvarchar(max)'),1,1,'') AS [udAttch]
From ABC a