SQL 查询连接多个记录中的值
我有一个包含雇员的表Employees(假设重要字段是ID int、Name varchar(50))和一个包含销售区域的表Areas(ID int、EmployeeID int、USState char(2))。
示例值是:
Employees
ID Name
1 Shoeman
2 Smith
3 Johnson
Areas
ID EmployeeID USState
1 1 NY
2 1 FL
3 1 AR
4 2 DC
5 2 AR
6 3 TX
任何人都可以给我一个有关通过以下方式进行 SQL 查询来获取输出记录集的提示:
EmployeeID USState
1 NY FL AR
2 DC AR
3 TX
目标平台:SQL Server 2005。
I've got a table Employees with employees (say the important fields are ID int, Name varchar(50)) and a table Areas with sales areas (ID int, EmployeeID int, USState char(2)).
The sample values are:
Employees
ID Name
1 Shoeman
2 Smith
3 Johnson
Areas
ID EmployeeID USState
1 1 NY
2 1 FL
3 1 AR
4 2 DC
5 2 AR
6 3 TX
Can anyone give me a hint on making a SQL query to get the output recordset in the following way:
EmployeeID USState
1 NY FL AR
2 DC AR
3 TX
Target platform: SQL Server 2005.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此操作称为 GROUP_CONCAT 在 MySQL 中,但 SQL Server 不支持它。
在 SQL Server 中,您可以使用 FOR XML PATH 来模拟相同的功能 黑客。
另一种方法是使用递归 CTE。这是一个不那么棘手的解决方案,但也更复杂:
两种方法都会给出您想要的结果:
This operation is called GROUP_CONCAT in MySQL but SQL Server doesn't support it.
In SQL Server you can simulate the same functionality using the FOR XML PATH hack.
An alternative is to use a recursive CTE. This is a less hacky solution but it is also more complicated:
Both methods give the result you want:
这是我首选的使用 UDF 的格式(在大型数据库上似乎也更快)
查询示例...
通过这种方式,您可以为希望以这种方式分解的每个列表创建一个 UDF。
This is my perfered format to use a UDF (appears to be much faster as well on a large DB)
Query example ...
In this manner you create one UDF for each list you wish to explode in this way.