您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Server串联GROUP BY

SQL Server串联GROUP BY

如果您使用的是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

因此,将来总是显示什么 及其 。那会给你更好的答案

SQLServer 2022/1/1 18:27:24 有290人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶