【问题标题】:Combining row values from multiple tables into one result cell将多个表中的行值合并到一个结果单元格中
【发布时间】:2020-04-02 20:07:30
【问题描述】:

我正在寻找创建各种报告,并且很难理解如何通过 SQL 中的单个选择来完成这部分(我的经验仅限于数据库课程和一些工作知识 - 更多前端开发人员)。

我应该提到,加入问题表和问题标签绑定/标签表对我来说不是问题 - 我无法理解的是如何将多个值添加到同一个结果单元格而不会出现多个讨厌的T-SQL 循环。

任何关于如何开始的提示都会有很大的帮助。

表1:问题表

ID  Content  CategoryName        
---------------------------     
1   ABC      Q1               
2   DEF      Q3               
3   GEH      Q3               

表 2:标签表

Tag Id            Tag Name
---------------------------------
4                 Dream
5                 Light
6                 Recover

表 3:问题标签绑定

BoundQuestion ID   BoundTagId
---------------------------------
1                  4
2                  5
3                  6
3                  4

期望结果表(添加标签列的问题表)

ID  Content  CategoryName   Tags     
----------------------------------------     
1     ABC      Q1           Dream    
2     DEF      Q3           Light    
3     GEH      Q3           Recover, Light

感谢所有看到这个的人,希望你们都保持安全。

【问题讨论】:

    标签: sql sql-server tsql join group-by


    【解决方案1】:

    您可以连接三个表并聚合以生成标签列表。我想横向连接在这里也应该是一个有效的选择,因为它避免了外部聚合:

    select q.*, t.*
    from questions q
    outer apply(
        select string_agg(tag_name, ', ') tags
        from questionTags qt
        inner join tags t on t.TagID = qt.BoundTagID
        where qt.BoundQuestionID = q.ID
    ) t
    

    请注意,string_agg() 是在 SQL Server 2017 中添加的。

    在早期版本中,我们可以使用for xml path 解决方案:

    select 
        q.*, 
        stuff(
            (
                ', ' + tag_name tags
                from questionTags qt
                inner join tags t on t.TagID = qt.BoundTagID
                where qt.BoundQuestionID = q.ID
                order by tag_name
                for xml path('') 
            ), 
            1, 2, ''
        ) tags
    from questions q
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2015-07-18
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多