1

這聽起來可能令人困惑,也很容易。但是,我嘗試了一些方法,並沒有奏效SQL Server從數據庫中檢索另一行數據列中的行的列表

現在我有一個表User與這些列

  • 編號
  • 用戶ID
  • FILEID
  • 文本

和另一個表File

  • 編號

和第三臺UserDetails

  • 編號
  • 名稱
  • 名字

User & File使用外鍵FileId在匹配Id 同樣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相關聯,即User有一個單與Userdetails建立一對一的關係。

UserFile有一對多的關係,所以每個User可以有多個文件。

如何爲每個用戶檢索這些文件?

像這樣的事情

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

回答

0

我用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 
0
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 
+0

嘿Devart!感謝代碼,但如果你能解釋你做了什麼,我將不勝感激,因爲我無能爲力。 爲什麼你要在文本和文件周圍放置「[]」。請進一步指導。 –

+0

首先,請檢查'ROW_COUNT' ...我們只是按每個用戶統計行數,並僅爲第一行提供值。 ''''只是一種很好的代碼風格......使用像'table','column','text'等系統詞的配額 – Devart

+0

嘿,這沒有完全按我想要的方式工作,但謝謝。 :) –

相關問題