SQL 服务器从数据库中检索另一个行列表中的行列表

SQL Server retrieve list of rows inside another list of rows from database

这听起来可能令人困惑,但也很容易。但是试了几种方法都没用

现在我有一个 table User 包含这些列

还有一个tableFile

和第三个 table UserDetails

User & File 在匹配 Id 时使用外键 FileId 链接 类似地 UserUserDetails 与外键 UserIdId.

链接

所以我在 SQL 中创建了一个视图:

CREATE VIEW [dbo].[vw_NewView] AS
    SELECT 
        U.Text as Text,
        UD.Name + ' ' + UD.LastName AS FullName
    FROM 
        User U
    LEFT OUTER JOIN 
        dbo.UserDetails UD on UD.Id = U.UserId

现在我得到了一个结果集:

Text     FullName
entry 1  NAme1
entry 2  Name2

注意:每个User都会关联一个UserDetails,即UserUserdetails是一对一的关系。

但是UserFile是一对多的关系,所以每个User可以有多个文件。

如何为每个用户检索这些文件?

像这样

Text     FullName   FileName 
entry 1  NAme1      File1
                    File2 
entry 2  Name2      File1
                    File2
                    File3
CREATE VIEW [dbo].[vw_NewView] AS
    SELECT
        [Text] = CASE WHEN RowNum = 1 THEN [Text] END,
        FullName = CASE WHEN RowNum = 1 THEN Name + ' ' + LastName END,
        [File]
    FROM (
        SELECT 
            U.[Text],
            UD.Name,
            UD.LastName,
            F.[File],
            RowNum = ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY FileID)
        FROM dbo.[User] U
        LEFT JOIN dbo.UserDetails UD on UD.Id = U.UserId
        LEFT JOIN dbo.[File] F ON F.FileID = UD.FileID
    ) t

我用 Stuff 得到了想要的输出,下面是代码。

 CREATE VIEW [dbo].[vw_NewView] AS
    SELECT 
        U.Text as Text,
        UD.Name + ' ' + UD.LastName AS FullName,
     SUBSTRING(
            (
                SELECT ','+CAST(U.Id AS VARCHAR) +'_'+F.FileName  AS [text()]
                FROM File F
                WHERE  U.Id = F.NoteId
                ORDER BY U.Id
                FOR XML PATH ('')
            ), 2, 1000) [FileName]
    FROM 
        User U
    LEFT OUTER JOIN 
        dbo.File F on UD.Id = U.NoteId

    GO

这对我有用。我的答案是一串逗号分隔值。

输出:

Text     FullName   FileName 
entry 1  NAme1      File1,File2 
entry 2  Name2      File1,File2,File3