SQL - 多行合二为一

标签 sql sql-server

首先,我查看了 this ,我的问题有所不同 - 尽管略有不同。我也尝试过这种方法并尝试修改它以适合我,但没有成功。

问题:

根据几个查询的结果,我得到以下结果:

ID   |  NAME  |   DESCID  |   TALL   |   GOODLOOKING   |   FAT
_______________________________________________________________
1    |  John  |      1    |  '1.8m'  |       Null      |   Null
1    |  John  |      2    |   Null   |      'Yes'      |   Null
1    |  John  |      3    |   Null   |       Null      |  '84kg'
1    |  John  |      4    |   Null   |       Null      |  '85kg'

注意:顺便说一句,只是一些虚拟数据。

我需要输出如下:

ID   |  NAME  |   TALL   |   GOODLOOKING   |       FAT
__________________________________________________________
1    |  John  |  '1.8m'  |       'Yes'     |   '84kg|85kg'

如果这不可能,我将不胜感激,请随时告诉我。

有什么帮助的 SQL 图例吗?

最佳答案

SQL Server 中没有Group_Concat 可以直接使用。您可以在相关查询中使用 FOR XML

SELECT ID,NAME,
STUFF((SELECT '|'+TALL        FROM Tbl1 t2 WHERE t2.ID = t1.ID AND t2.NAME = t1.NAME ORDER BY t2.descid FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as tall,
STUFF((SELECT '|'+GOODLOOKING FROM Tbl1 t2 WHERE t2.ID = t1.ID AND t2.NAME = t1.NAME ORDER BY t2.descid FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as GOODLOOKING,
STUFF((SELECT '|'+FAT         FROM Tbl1 t2 WHERE t2.ID = t1.ID AND t2.NAME = t1.NAME ORDER BY t2.descid FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as FAT
FROM Tbl1 t1
GROUP BY ID,NAME

SQL Fiddle

关于SQL - 多行合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889109/

相关文章:

sql - 创建存储过程语法,与 GO 的使用相关

sql - 处理 ORA-01795 :maximum number of expressions in a list is 1000 in hibernate 的最有效方法

sql - 使用 SQL 查询的 TreeView

mysql - "None"在mysql中怎么会等于0呢?

sql - 具有相同外键的 INT 值之和

sql - SSDT 在比较和发布中跳过 NOCHECK 约束

sql-server - 如何使用单个 ALTER table 语句向表添加带有检查约束的新列?

sql - 将 xml 列中的数据插入临时表

c# - 如何将 int 转换为字节数组?

sql - 在sql中存储多个层次结构