在SQL Server中,如果一张表包含客户(Customer)、金额(Amount)和业务员(Salesperson)字段,并且每个客户可能关联多个业务员,如何设计查询以显示每个客户资料对应的总金额以及把这个客户下的所有业务员展示在一栏,业务员之前用分隔符区隔开?
时间: 2024-11-22 11:37:44 浏览: 32
在SQL Server中,你可以使用`GROUP BY`和`STRING_AGG`函数(如果版本支持的话,不支持可以考虑使用` Stuff()` 和 ` FOR XML PATH()` 替代)来实现这个需求。假设你的表名为`Transaction`,这里是一个示例查询:
```sql
SELECT
Customer.CustomerID,
Customer.CustomerName,
STRING_AGG(Salesperson.SalespersonName + ' - ', ',' ON_CONCAT) AS SalespersonsAndAmount
FROM
Transaction
JOIN
Customer ON Transaction.CustomerID = Customer.CustomerID
GROUP BY
Customer.CustomerID,
Customer.CustomerName;
```
在这个查询中:
- `Customer.CustomerID` 和 `Customer.CustomerName` 用于选择客户的基本信息。
- `STRING_AGG(Salesperson.SalespersonName + ' - ', ',')` 使用`STRING_AGG`函数将所有的销售员姓名与' - '连接起来,每个销售员之间用逗号分隔。如果有`SalespersonID`作为关联字段,记得也添加到聚合函数中。
- `ON_CONCAT`关键字(只适用于某些版本的SQL Server)用于指定当遇到第一个元素时开始字符串,后面的元素会被追加。
阅读全文