SQL-将多行合并为一行

SQL-将多行合并为一行,sql,sql-server,Sql,Sql Server,首先,我已经看过了,我的问题是不同的——尽管有点不同。我也尝试过这种方法,并试图修改它来为我工作,但没有骰子 问题: 通过几个查询的结果,我得到以下结果: ID | NAME | DESCID | TALL | GOODLOOKING | FAT _______________________________________________________________ 1 | John | 1 | '1.8m' |

首先,我已经看过了,我的问题是不同的——尽管有点不同。我也尝试过这种方法,并试图修改它来为我工作,但没有骰子

问题:

通过几个查询的结果,我得到以下结果:

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中没有任何东西可以直接使用。您可以在相关查询中使用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

所以只有在
fat
列中进行连接?如果
Goodlooking
有2个
notnull
distinct
值,该怎么办?在descid后面的任何列中串联。谢谢你的提问,那是SQL Server,还是仅仅是MySQL?SQL Server。正如在标记中一样。您还可以看看递归CTEsLooks good。我投票赞成努力,考试后会把分数作为答案。谢谢,这很有效。然而,解决方案太慢了。这只是这种工作的产物吗?因为这比c#-中的brunt循环要慢得多。是的,这会很慢,因为sql需要读取表4次。@Terrance00:既然您说非聚合行集是两个查询的结果,那么您可以尝试看看这里建议的技术是否可以与这些查询中的任何一个相结合——谁知道呢,当应用于原始数据集时,它的性能可能会更好。