gpt4 book ai didi

SQL Server 连接 GROUP BY

转载 作者:行者123 更新时间:2023-12-03 01:46:32 25 4
gpt4 key购买 nike

我有一个如下所示的查询

SELECT J.JobID,T.Title FROM JobsTagMap J
Left Join Tags T
ON J.TagID=T.TagID

返回以下数据集(简化后,JobID实际上是一个UniqueIdentifier)

JobID    Title
1 Tag1
1 Tag2
2 Tag2
2 Tag5
2 Tag9

现在,我想按 JobID 列对其进行分组并连接标题,因此结果如下

JobID    Title
1 Tag1,Tag2
2 Tag2,Tag5,Tag9

我该怎么做?

最佳答案

如果您使用的是 SQL Server 2005+。然后你可以这样做:

SELECT 
JobsTagMap.JobID,
STUFF
(
(
SELECT
',' +Title
FROM
Tags
WHERE
Tags.TagID=JobsTagMap.TagID
FOR XML PATH('')
)
,1,1,'') AS Title
FROM JobsTagMap

编辑

因为你没有向我们展示表结构以及不同表中的数据。这有点难以得知。所以我假设你的表结构看起来像这样:

CREATE TABLE JobsTagMap
(
JobID INT,
TagID INT
)

CREATE TABLE Tags
(
TagID INT,
Title VARCHAR(100)
)

有了这些数据:

INSERT INTO JobsTagMap
VALUES(1,1),(1,2),(2,2),(2,4),(2,5)

INSERT INTO Tags
VALUES(1,'Tag1'),(2,'Tag2'),(3,'Tag2'),(4,'Tag5'),(5,'Tag9')

如果您正在获取该数据,则您显示的 JobID 不能是唯一的。您可能在唯一的地方有一个 Job 表。如果您只想使用您显示的这些表格,那么您需要执行以下操作:

;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,
JobsTagMap.*
FROM
JobsTagMap
)
SELECT
*,
STUFF
(
(
SELECT
',' +Title
FROM
Tags
JOIN JobsTagMap
ON Tags.TagID=JobsTagMap.TagID
WHERE
JobsTagMap.JobID=CTE.JobID
FOR XML PATH('')
)
,1,1,'') AS Title
FROM
CTE
WHERE
CTE.RowNbr=1

这会给你这个结果:

1   1   1   Tag1,Tag2
1 2 2 Tag2,Tag5,Tag9

因此,将来始终显示什么表结构及其数据。这会给你更好的答案

关于SQL Server 连接 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10461874/

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