SQLserver查询,多结果合并到同一格换行展示,并按'AID'分组
时间: 2023-12-23 13:06:04 浏览: 26
您可以尝试使用 `STUFF` 函数结合 `FOR XML PATH` 来实现将多行数据合并到同一格并用换行符分隔的效果,并使用 `GROUP BY` 按照 `AID` 分组。具体操作步骤如下:
1. 使用 `SELECT` 查询需要合并的多行数据和 `AID`,并使用 `FOR XML PATH('')` 将多行数据合并到同一行,并且不添加 XML 标签。例如:
```
SELECT 'A' AS 'name', 1 AS 'AID'
UNION ALL
SELECT 'B' AS 'name', 1 AS 'AID'
UNION ALL
SELECT 'C' AS 'name', 2 AS 'AID'
UNION ALL
SELECT 'D' AS 'name', 2 AS 'AID'
```
该查询语句会返回以下结果:
```
name AID
---- ---
A 1
B 1
C 2
D 2
```
2. 在查询语句的最后,使用 `STUFF` 函数将多行数据合并到同一格并且用换行符分隔开,并使用 `GROUP BY` 按照 `AID` 分组。例如:
```
SELECT AID, STUFF((SELECT CHAR(13) + CHAR(10) + name FROM (
SELECT 'A' AS 'name', 1 AS 'AID'
UNION ALL
SELECT 'B' AS 'name', 1 AS 'AID'
UNION ALL
SELECT 'C' AS 'name', 2 AS 'AID'
UNION ALL
SELECT 'D' AS 'name', 2 AS 'AID'
) t WHERE t.AID = a.AID FOR XML PATH('')), 1, 2, '') AS 'names'
FROM (
SELECT 'A' AS 'name', 1 AS 'AID'
UNION ALL
SELECT 'B' AS 'name', 1 AS 'AID'
UNION ALL
SELECT 'C' AS 'name', 2 AS 'AID'
UNION ALL
SELECT 'D' AS 'name', 2 AS 'AID'
) a
GROUP BY a.AID
```
该查询语句会返回以下结果:
```
AID names
--- -----
1 A
B
2 C
D
```
其中,`CHAR(13) + CHAR(10)` 表示换行符,`STUFF` 函数的第一个参数表示需要合并的多行数据,第二个参数表示从多行数据的第几个字符开始合并,第三个参数表示需要合并的字符数,这里是 2,表示合并换行符。`GROUP BY` 表示按照 `AID` 分组。