gpt4 book ai didi

用于连接多条记录中的值的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 06:48:43 25 4
gpt4 key购买 nike

我有一个带有员工的表员工(比如重要的字段是 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。

最佳答案

此操作称为 GROUP_CONCAT在 MySQL 中,但 SQL Server 不支持它。

在 SQL Server 中,您可以使用 FOR XML PATH 模拟相同的功能。黑客。

SELECT extern.EmployeeID, states AS USState
FROM Areas AS extern
CROSS APPLY (
SELECT USState + ' '
FROM Areas AS intern
WHERE extern.EmployeeID = intern.EmployeeID
FOR XML PATH('')
) T1 (states)
GROUP BY extern.EmployeeID, states
ORDER BY extern.EmployeeID

另一种方法是使用 recursive CTE .这是一个不那么hacky的解决方案,但它也更复杂:
WITH qs(EmployeeID, USState, rn, cnt) AS
(
SELECT
EmployeeID,
USState,
ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY USState),
COUNT(*) OVER (PARTITION BY EmployeeID)
FROM Areas
),
t (EmployeeID, prodname, gc, rn, cnt) AS
(
SELECT EmployeeID, USState, CAST(USState AS NVARCHAR(MAX)), rn, cnt
FROM qs
WHERE rn = 1
UNION ALL
SELECT
qs.EmployeeID, qs.USState,
CAST(t.gc + ' ' + qs.USState AS NVARCHAR(MAX)),
qs.rn, qs.cnt
FROM t
JOIN qs ON qs.EmployeeID = t.EmployeeID
AND qs.rn = t.rn + 1
)
SELECT EmployeeID, gc AS USState
FROM t
WHERE rn = cnt
ORDER BY EmployeeID
OPTION (MAXRECURSION 0)

这两种方法都会给出你想要的结果:

雇员 ID 美国州
1 纽约佛罗里达州
2 直流增强现实
3 发送

关于用于连接多条记录中的值的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com