如何获得:

id       Name       Value
1          A          4
1          B          8
2          C          9

id          Column
1          A:4, B:8
2          C:9

推荐答案

No CURSOR, WHILE loop, or User-Defined Function needed

只需要对XML和PATH进行创新.

[注意:此解决方案仅适用于SQL 2005及更高版本.原始问题未指定正在使用的版本.]

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

Sql相关问答推荐

Select /过滤postgr中的树 struct

解析SQL Server中的嵌套JSON

最近3个月收到的邮箱总数

直接加法(1+1)与聚合函数SUM(1+1)的区别是什么

将计算列设置为持久化的目的是什么?

根据开始日期和结束日期的差异计算每天的计费

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

其中使用表名作为;行值;记录?

在 PostgreSQL 中使用 ltree 列进行累积

将 jsonb 数组中的对象取消嵌套到单独的行中

使用 union 的有序结果获取行数

使用多个数据库调用重载 CQRS 模式

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

比使用NOT EXISTS更高效的SQL删除方法是什么?

Snowflake中的动态SQL优化

PostgreSQL - 递归地聚合来自不同列的属性

SQL Server Where 条件

如何根据 ID 和指标从 2 个表中找到不同的值?

按 15 分钟递增计数分组,包括 0 计数

如何使用子查询锁定此查询中的选定行?