sql >> Databáze >  >> RDS >> Sqlserver

Jak vytvořit funkci SQL Server pro spojení více řádků z poddotazu do jednoho odděleného pole?

Pokud používáte SQL Server 2005, můžete použít příkaz 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]

Je to mnohem jednodušší než použití kurzoru a zdá se, že to funguje docela dobře.

Aktualizovat

Pro každého, kdo stále používá tuto metodu s novějšími verzemi SQL Server, existuje jiný způsob, jak to udělat, který je o něco jednodušší a výkonnější pomocí STRING_AGG metoda, která je k dispozici od SQL Server 2017.

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

To také umožňuje zadat jiný oddělovač jako druhý parametr, což poskytuje o něco větší flexibilitu oproti předchozí metodě.



  1. Metody zálohování AWS RDS

  2. Přiřazení obrázků k uzlům stromového zobrazení

  3. Jak spustit makro z navigačního tlačítka v aplikaci Access

  4. Ručně přidat novou instanci RAC