将多行合并为一列

omtl5h9j  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(480)

我正在开发一个用于报告目的的存储过程,我需要将行合并到一个列中,但我找不到这样做的方法。我有四张表,case,deborter,debortoraddress和casenote。我决定创建一个包含所需列的临时表,填充占据一行的临时表,然后使用update语句将所需最后一列的多行合并到一行中,而不是在单个语句中尝试这样做。我的temp表中有capkey(case表的id)、ownername(来自债务人)、address(来自债务人)和note的行。对于每个案例,可能有多个注解(存储在casenote表中)。因此,我可能有案例1,capkey值为1,owername of john jones,address of 1234 main st。可能有一个音符写着“被叫并留下了一条信息”,另一个音符写着“发送了一封信”,还有一个音符写着“留下了第二封语音邮件”,等等。我想把这三个音符组合成一行,音符值为“被叫并留下了一条信息,发了信,还留了第二封语音信箱。我可以使用空格、句点或逗号作为分隔符。我在理论上找到了一种方法来进行更新,但是我得到了一个错误,子查询返回的值超过了1。下面是程序的“心脏”。我已经绞尽脑汁想了两天了。如有任何帮助,我们将不胜感激。我想说的是:

CREATE TABLE #temp
(
CaseKey                 int,
OwnerName               varchar(500),
Address                 varchar(500),
Note                    varchar(MAX)
)

DECLARE @val Varchar(MAX);

INSERT INTO #temp 
    (CaseKey, OwnerName, Address)
    SELECT ca.CApKey, DEFirstName + ' ' + DELastName, da.DAAddress1
    FROM [Case] ca INNER JOIN Debtor de ON ca.CApKey = de.CApKey INNER JOIN DebtorAddress da ON ca.CApKey = da.CApKey
    WHERE ca.LFpKey = @LFpKey AND de.DEIsPrimary = 1

UPDATE #temp SET Note = 
    (SELECT COALESCE(@val + ', ' + CANNote, CANNote) 
    FROM CaseNote WHERE CApKey = 51) 
    --SELECT @val;)
SELECT * FROM #temp

谢谢!

5lhxktic

5lhxktic1#

如果我没听错的话,你就得把所有的笔记合起来。
获取数据,从4个表中查询到一个表中(例如#t)
那你可以用 XML PATH 以及 Stuff 为了达到你的目标(以后你可以用它来做任何你想做的事情,比如插入到表中或者在报表中显示等等)

SELECT CaseKey, OwnerName, Address, (STUFF((
        SELECT ', ' + Note
        FROM #t tx
        where tx.CaseKey = t.CaseKey and tx.OwnerName = t.OwnerName and tx.Address = t.Address 
        FOR XML PATH('')
        ), 1, 2, '')
    ) AS StringValue
From #t t
Group by CaseKey, OwnerName, Address

这是小提琴

相关问题