将多行连接成单行并计算 SQL Server 中连接的行数

Posted

技术标签:

【中文标题】将多行连接成单行并计算 SQL Server 中连接的行数【英文标题】:Concatenate multiple rows into single rows and count the concatenated rows in SQL Server 【发布时间】:2019-11-22 07:40:44 【问题描述】:

我有一张桌子 A:

我想要这样的输出:

.

我想将多行连接成一行,并且我想计算连接了多少行..

谢谢

【问题讨论】:

这能回答你的问题吗? Simulating group_concat mysql function in Microsoft SQL Server 2005? 【参考方案1】:

使用stuff()

select id,  stuff(( select concat( ',', name) from tablename b where a.id= b.id
for xml path('')),1,1, ''),count(*) as cnt
    from tablename a
    group by id

【讨论】:

【参考方案2】:
CREATE TABLE #Temp
(ID INT,NAME VARCHAR(50))


INSERT INTO #Temp(ID, [NAME])VALUES(1,'ABC')
INSERT INTO #Temp(ID, [NAME])VALUES(1,'EFG')
INSERT INTO #Temp(ID, [NAME])VALUES(2,'HIJ')
INSERT INTO #Temp(ID, [NAME])VALUES(2,'JKL')
INSERT INTO #Temp(ID, [NAME])VALUES(3,'MNO')

首先创建了一个表......

SELECT t.ID,STUFF(
(
SELECT ',' + s.NAME
FROM #Temp s
WHERE s.ID = t.ID
FOR XML PATH('')),1,1,'') AS NAME,COUNT(t.ID) AS COUNT

FROM #Temp AS t
GROUP BY ID

使用东西()

【讨论】:

以上是关于将多行连接成单行并计算 SQL Server 中连接的行数的主要内容,如果未能解决你的问题,请参考以下文章

SQL中如何将单行数据拆分成多行?

Apache Spark将多行连接成单行列表[重复]

使用 LINQ 将多行连接成单行(CSV 属性)

使用 LINQ 将具有相同值的多行列表连接成单行

在 MySQL 中将多行连接成单行

将包含多个值的多行连接成 MS Access 中的单行