sql >> データベース >  >> RDS >> Sqlserver

GROUPBYを使用してSQLServerで文字列を連結するにはどうすればよいですか?

    CURSOR、WHILEループ、またはユーザー定義関数は必要ありません

    FORXMLとPATHを使ってクリエイティブである必要があります。

    [注:このソリューションは、SQL2005以降でのみ機能します。元の質問では、使用中のバージョンが指定されていませんでした。]

    CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT)
    
    INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4)
    INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8)
    INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)
    
    SELECT 
      [ID],
      STUFF((
        SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
        FROM #YourTable 
        WHERE (ID = Results.ID) 
        FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
      ,1,2,'') AS NameValues
    FROM #YourTable Results
    GROUP BY ID
    
    DROP TABLE #YourTable
    


    1. AmazonRDSポイントインタイムリカバリとClusterControlの比較

    2. SQLiteの名前変更列

    3. Oracleのすべてのテーブル制約を無効にする

    4. クラスター化および非クラスター化インデックス:7つのトップポイントの説明