sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan opretter man en SQL Server-funktion for at forbinde flere rækker fra en underforespørgsel til et enkelt afgrænset felt?

Hvis du bruger SQL Server 2005, kan du bruge kommandoen FOR XML PATH.

SELECT [VehicleID]
     , [Name]
     , (STUFF((SELECT CAST(', ' + [City] AS VARCHAR(MAX)) 
         FROM [Location] 
         WHERE (VehicleID = Vehicle.VehicleID) 
         FOR XML PATH ('')), 1, 2, '')) AS Locations
FROM [Vehicle]

Det er meget nemmere end at bruge en markør, og det ser ud til at fungere ret godt.

Opdater

For alle, der stadig bruger denne metode med nyere versioner af SQL Server, er der en anden måde at gøre det på, som er lidt nemmere og mere effektiv ved at brugeSTRING_AGG metode, der har været tilgængelig siden SQL Server 2017.

SELECT  [VehicleID]
       ,[Name]
       ,(SELECT STRING_AGG([City], ', ')
         FROM [Location]
         WHERE VehicleID = V.VehicleID) AS Locations
FROM   [Vehicle] V

Dette gør det også muligt at angive en anden separator som den anden parameter, hvilket giver lidt mere fleksibilitet i forhold til den tidligere metode.



  1. Sådan opretter du indlejret tabel som databaseobjekt i Oracle

  2. Sådan bruger du Sum, Avg og Count i Select Statement - SQL Server / TSQL Tutorial Del 128

  3. Sådan løses fejlen `prisma/klient blev ikke initialiseret endnu` på Vercel

  4. Forhindrer denne kode SQL-injektion?