簡體   English   中英

將多行合並為一列

[英]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 PATHStuff來實現您的目標(稍后您可以將其用於插入表格或顯示在報告等中的任何目的)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM