Sql server 2005 获取以逗号分隔的PK';SQL Server 2005中记录的重复项是否为?
这是我之前的一个问题: 考虑到以下数据,此查询更有意义:Sql server 2005 获取以逗号分隔的PK';SQL Server 2005中记录的重复项是否为?,sql-server-2005,tsql,delimited-text,Sql Server 2005,Tsql,Delimited Text,这是我之前的一个问题: 考虑到以下数据,此查询更有意义: SELECT Receipts.ReceiptID, FolderLink.ReceiptFolderID FROM dbo.tbl_ReceiptFolderLnk AS FolderLink INNER JOIN dbo.tbl_Receipt AS Receipts ON FolderLink.ReceiptID = Receipts.ReceiptID 结果如下: Receip
SELECT Receipts.ReceiptID, FolderLink.ReceiptFolderID
FROM dbo.tbl_ReceiptFolderLnk AS FolderLink INNER JOIN
dbo.tbl_Receipt AS Receipts ON FolderLink.ReceiptID = Receipts.ReceiptID
结果如下:
ReceiptID ReceiptFolderID NewColumn (duplicate folder ID list)
-------------------- --------------- ----------
1 3
2 3
3 7
4 <---> 4 8,9
5 4
6 1
3 8
4 <---> 8 4,9
4 <---> 9 4,8
ReceiptID ReceiptFolderID新列(重复文件夹ID列表)
-------------------- --------------- ----------
1 3
2 3
3 7
4 4 8,9
5 4
6 1
3 8
4 8 4,9
4 9 4,8
这个答案让我看到了distinct(ReceiptID)的。。。伟大的现在,对于那些ID,3和4,它们存在于多个ReceiptFolderID中
考虑到这个非唯一的ReceiptID列表,我希望在ReceiptID也存在的位置添加一列逗号分隔的ReceiptFolderLinkID
因此,对于ReceiptID=4,新列(例如DuplicateFoldersList)应为“8,9”等,类似于ID=3或任何其他副本
因此,基本上,我希望另一列指出ReceiptFolderID在其他文件夹中的其他ReceiptID
谢谢 在Mysql中有group_concat聚合函数,但在T-SQL和oracle中,您需要使用另一种方法。。。列出了T-SQL的多种方法,但没有一种方法是非常简单和容易的(就像mysql一样)您可以创建一个函数,给定该行的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