[英]Combine Multiple Rows Into A Single Column
我正在開發一個用於報告目的的存儲過程,我需要將行組合在一個列中,但我找不到這樣做的方法。 我有四個表,Case、Debtor、DebtorAddress 和 CaseNote。 與其嘗試在單個語句中執行此操作,我決定創建一個包含所需列的臨時表,填充占據單行的列,然后使用更新語句將所需的最后一列的多行組合成單行. 我的臨時表有 CApKey(Case 表的 ID)、OwnerName(來自 Debtor)、Address(來自 DebtorAddress 和 Note)的行。對於每個 Case 可能有多個 Notes(存儲在 CaseNote 表中)。所以我可能有案例 #1,CApKey 值為 1,OwerName 為 John Jones,地址為 1234 Main St。可能有一個 Note 寫着“Called and left message”,另一個寫着“Sent letter”,另一個寫着“Left”第二個語音郵件”等。我想將三個注釋組合成一行,注釋值為 Called and left a message、Sent Letter 和 Left a second voicemail。我可以使用空格、句點或逗號作為分隔符。我在理論上找到了一種更新方法,但我收到一個錯誤,即子查詢返回超過 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
謝謝!
如果我理解正確,你需要合並所有的筆記。
獲取您的數據,從 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
這是小提琴
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.