【问题标题】:SQL query inner join and group by to get comma separated value without using string_agg()SQL查询内部连接和分组以获取逗号分隔值而不使用string_agg()
【发布时间】:2020-03-24 20:59:37
【问题描述】:

我有以下三个表格,我想从中得到一个具体的结果

TableA -
key1    key2
121     4
131     4
141     5
151     3
161     3
171     6
181     6
191     6
...     ...


TableB -
key1    key3
121     1001
131     1111
141     1111
151     1222
161     1222
171     1234
181     1001
191     1111
...     ...


TableC -
key3    key4
1001    "aa"
1111    "gg"
1222    "hh"
1234    "jj"
...     ...

我想要一个 SQL 查询(可以使用内连接)给我以下结果:-

New_Table -
key2    key4
3       "hh"
4       "aa", "gg"
5       "gg"
6       "aa", "gg", "jj"

我从Stackoverflow 得到了以下查询的答复:-

select t1.key2, string_agg(t3.key4, ',') key4
from table1 t1
inner join table2 t2 on t2.key1 = t1.key1
inner join table3 t3 on t3.key3 = t1.key3
group by t1.key2

但是我的 SQL 服务器不允许使用 string_agg() 函数!

如何将 string_agg() 替换为旧版本 SQL Server 的等效形式?

SQL - Microsoft SQL Server 2012

【问题讨论】:

  • 那么为什么要为问题添加mysql标签呢?既然你说这是针对 SQL Server 的。
  • 糟糕,抱歉!
  • “旧版本的 SQL Server”并没有真正指定我们需要知道的版本,是吗? :P
  • 微软 SQL Server 2012
  • 这能回答你的问题吗? string_agg for sql server pre 2017

标签: sql-server performance


【解决方案1】:

对于未启动的分组连接,当您想要获取多行数据并将它们压缩为单个字符串(通常使用逗号、制表符或空格等分隔符)时。有些人可能称之为“水平连接”。 多年来有很多方法可以解决这个问题:

标量 UDF、公共语言运行时 (CLR)、递归 CTE、光标

在这里阅读:https://sqlperformance.com/2014/08/t-sql-queries/sql-server-grouped-concatenation

也可以在这里阅读:

How to make a query with group_concat in sql server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多