Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 获取以逗号分隔的PK';SQL Server 2005中记录的重复项是否为?_Sql Server 2005_Tsql_Delimited Text - Fatal编程技术网

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