Вы можете создать функцию, которая, учитывая ReceiptID и «текущий» ReceiptFolderID для этой строки, возвращает другие ReceiptFolderID в виде составного списка, разделенного запятыми. Пример:
CREATE FUNCTION [dbo].[GetOtherReceiptFolderIDs](@receiptID int, @receiptFolderID int)
RETURNS varchar(MAX) AS
BEGIN
DECLARE @returnValue varchar(MAX)
SELECT @returnValue = COALESCE(@returnValue + ', ', '') + COALESCE(CONVERT(varchar(MAX), ReceiptFolderID), '')
FROM tbl_ReceiptFolderLink AS FolderLink
WHERE FolderLink.ReceiptID = @receiptID
AND FolderLink.ReceiptFolderID <> @receiptFolderID
RETURN @returnValue
END
Затем вы можете запустить запрос, который использует эту функцию для получения вашего нового столбца:
SELECT Receipts.ReceiptID, ReceiptFolderID, dbo.GetOtherReceiptFolderIDs(Receipts.ReceiptID, ReceiptFolderID) AS NewColumn
FROM tbl_Receipt AS Receipts
INNER JOIN tbl_ReceiptFolderLink AS FolderLinks
ON Receipts.ReceiptID = FolderLinks.ReceiptID
Я проверил это, и оно дает следующие результаты (если я правильно понял вашу схему):
ReceiptID ReceiptFolderID NewColumn
6 1 NULL
1 3 NULL
2 3 NULL
4 4 8, 9
5 4 NULL
3 7 8
3 8 7
4 8 4, 9
4 9 4, 8