这是我的桌子-

item      item_id   components
chair     1001      wood
chair     1001      screw
chair     1001      paint
book      1002      pages
book      1002      bind

基于itemitem_id,我想使用逗号(,)将组件连接在一起.例如,我应该得到以下输出

item    item_id    components

chair   1001       wood,screw,paint
book    1002       pages,bind

下面是我现在拥有的代码.我正在SFMC上运行此程序,但收到错误- Error saving the Query field.Incorrect syntax near 'SEPARATOR'

SELECT item_id, GROUP_CONCAT(components SEPARATOR ',')
FROM table
GROUP BY item_id

有没有人能帮我找到一种方法来运行这个查询而不出错,并得到想要的结果?

推荐答案

SQL Server中没有GROUP_CONCAT.

在SQL Server中,MySQL GROUP_CONCAT的等效值为STRING_AGG

try :

SELECT item_id, 
       string_agg(components,  ',') as components
FROM my_table
GROUP BY item_id

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=b4a37873ec09b38e77c61c0053d7ed24

针对低于SQL Server 2017的版本的解决方案:

SELECT item_id
      , components = STUFF((
          SELECT ',' + mt.components
          FROM my_table mt
          WHERE m.item_id = mt.item_id
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM my_table m
group by item_id;

https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=cd30b7f2335171273f3a8bbe2930d1cf

Sql相关问答推荐

有没有一种正确的方法来利用SQL UNION来从三个潜在查询中 Select 最大值?

按每天的最大值分组

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

了解放置时的连接

从字符串中删除";1、";和";2,";,而不删除";11、";和";12、";

按分隔符和总和分析字符串

用于过滤嵌套对象或数组中的JSON数据的WHERE条件

snowflake/SQL嵌套的JSON对象和数组

每小时 Select 1行

在UNION查询中查找MIN

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

SQL Server 查询 WHERE LIKE

如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

Postgres如何在一个日历周中前进和回填值

获取记录的上一个值,并将其与当前值一起显示

SQL 函数 DIFFERENCE 返回有趣的分数

如何在 SQL Server 中参数化 Select top 'n'

有条件求和

在 PostgreSQL 中,如何将数组中的每个元素用作另一个表中的键?

如何刷新在视图之上创建的表