1

Cela peut sembler déroutant et facile aussi. Mais j'ai essayé quelques moyens et cela n'a pas fonctionnéSQL Server récupérer la liste des lignes dans une autre liste de lignes de la base de données

Maintenant, j'ai une table User avec ces colonnes

  • Id
  • UserId
  • FileId
  • Texte

et un autre tableau File

  • Id
  • Nom du fichier

et une 3ème table de UserDetails

  • Id
  • Nom
  • LastName

User & File sont liés à l'aide FileId clé étrangère correspondant à Id De même User et UserDetails sont liés à clé étrangère UserId et Id.

Je créé une vue en 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 

Maintenant, j'obtenir un jeu de résultats:

Text  FullName 
entry 1 NAme1 
entry 2 Name2 

Note: chaque User sera associé à un UserDetails, à savoir User a un de un relation à un avec Userdetails.

Mais User a une relation un-à-plusieurs avec File, donc tous les User peuvent avoir plusieurs fichiers.

Comment puis-je récupérer ces fichiers pour chaque utilisateur?

Quelque chose comme ça

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

Répondre

0

je Stuff pour obtenir la sortie désirée, ci-dessous le code.

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 

Cela a fonctionné pour moi. J'ai obtenu ma réponse sous la forme d'une chaîne de valeurs séparées par des virgules.

sortie:

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

Hey Devart!merci pour le code, mais j'apprécierais si vous pouviez expliquer ce que vous avez fait ... comme je suis désemparé. pourquoi avez-vous mis "[]" autour du texte et du fichier. S'il vous plaît guider plus loin. –

+0

Tout d'abord, s'il vous plaît vérifier 'ROW_COUNT' ... nous ne faisons que compter les lignes par chaque utilisateur et fournir des valeurs uniquement pour la première ligne. '[]' juste un bon style de code ... utilisez un quota pour les mots système comme 'table',' column', 'text', etc – Devart

+0

Hey ça n'a pas fonctionné exactement comme je le voulais mais merci. :) –