我正在开发一个用于报告目的的存储过程,我需要将行合并到一个列中,但我找不到这样做的方法。我有四张表,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
谢谢!
1条答案
按热度按时间5lhxktic1#
如果我没听错的话,你就得把所有的笔记合起来。
获取数据,从4个表中查询到一个表中(例如#t)
那你可以用
XML PATH
以及Stuff
为了达到你的目标(以后你可以用它来做任何你想做的事情,比如插入到表中或者在报表中显示等等)这是小提琴