【问题标题】:Concat strings in Azure without XML [duplicate]没有 XML 的 Azure 中的 Concat 字符串 [重复]
【发布时间】:2019-03-06 18:04:25
【问题描述】:

我有一个查询,我试图将两行的不同值连接起来。我使用的是 Azure SQL DW,它不支持 XML 函数。

这是我写的查询:

SELECT CAST(STUFF((
    SELECT ',' + cast(s.MONTH_ID AS VARCHAR(6))
    FROM (
        SELECT DISTINCT CAST(MONTH_ID AS VARCHAR(6)) AS MONTH_ID
        FROM dbo.MARGIN_CLASS_FACT
        ) s
    FOR XML PATH('')
    ), 1, 1, '') AS VARCHAR(35)) AS MONTH_ID;

当我使用 FOR XML PATH 我收到此错误 ** 消息 103010,第 16 级,状态 1,第 1 行 第 1 行解析错误,第 212 列:'FOR' 附近的语法不正确。**

输入是:

2018
2019

结果输出应该是这样的:

201808,201809

【问题讨论】:

  • Stuff / FOR XML 代码是针对 Sql Server 缺乏 MySql 的 GROUP_CONCAT 功能的传统破解。尽管 Sql Server 本身现在终于有了 STRING_AGG,但 Azure DWH 上尚不支持复制链接。

标签: sql tsql azure-sqldw


【解决方案1】:

以下是 Azure SQL 12.0.2000.8,但显然不适用于 Azure DWH

Stuff / Xml hack 可以解决 MySql 的 GROUP_CONCAT / Oracle 的 LIST_AGG 在最近版本的 Sql 中不再需要的问题 - 我们现在有 STRING_AGG 2017 及更高版本:

select STRING_AGG(MyColumn, ',')
from [dbo].[MyTable];

我刚刚在最近的 Azure DB 上检查过这个

Microsoft SQL Azure (RTM) - 2018 年 8 月 31 日 12.0.2000.8 20:17:59
版权所有 (C) 2018 Microsoft Corporation

【讨论】:

  • 它显示 STRING_AGG 不是内置函数
  • 我刚刚使用 STRING_AGG 对 SQL Azure 数据库进行了查询,它运行良好。 Microsoft SQL Azure (RTM) - 12.0.2000.8 2018 年 8 月 31 日 20:17:59 版权所有 (C) 2018 Microsoft Corporation
  • 我的错 - OP 已列出 Azure DWH。 STRING_AGG 可能尚未更新。
  • @StuartLC:您已将其标记为重复,我该如何处理
  • 就是这样 - 没有答案,因为 Azure DW 既不支持进行 STUFF / XML hack 所需的大部分 XML(或 JSON)功能,也不支持“正确” MS最终在主流SQL(包括Azure)数据库中实现的STRING_AGG功能。 this here 有一个功能请求。你也可以试试these other workarounds
猜你喜欢
  • 2017-01-21
  • 2019-01-08
  • 2013-04-13
  • 2012-01-22
  • 1970-01-01
  • 2021-01-14
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多