【问题标题】:Can someone find the syntax error in this simple query?有人能在这个简单的查询中找到语法错​​误吗?
【发布时间】:2018-04-03 12:27:17
【问题描述】:

请帮我解决这个错误。

SELECT StateProvince,STRING_AGG(AddressID, ',') WITHIN GROUP (ORDER BY AddressID)
FROM [SalesLT].[Address] GROUP BY StateProvince;

我找不到这个错误,但它说

'(' 附近的语法不正确。

【问题讨论】:

  • 您使用的是 SQL Server 2017 吗?
  • 你到底想达到什么目的?
  • 查看你使用的是哪个版本的sqlselect @@version
  • @GordonLinoff,如果他没有使用 MS SQL 2017,那么错误信息会不会有所不同?
  • 我不明白为什么对这个问题投反对票,因为我在我的 SQL2017 服务器上看到了完全相同的东西。这将正常工作... SELECT StateProvince,STRING_AGG(AddressID, ',') FROM [SalesLT].[Address] GROUP BY StateProvince ...但是一旦添加 WITHIN GROUP () 选项,它就会失败并显示该消息。

标签: sql sql-server aggregate-functions string-function


【解决方案1】:

将数据库从 SQL 2008R2 升级到 2017 后遇到同样的问题。通过将兼容性级别设置为 110(或更高?)来修复

【讨论】:

    【解决方案2】:

    SQL SERVER 2017

    SELECT StateProvince,
           STRING_AGG(AddressID, ',') WITHIN GROUP (ORDER BY AddressID) AS AddressID
    FROM [SalesLT].[Address] GROUP BY StateProvince;
    

    演示

    http://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=69e5f9e9c5f3cab62e4b2eb9fb678299

    2017 年以下的 SQL SERVER

    SELECT
          StateProvince, 
          AddressID = STUFF((
              SELECT ',' + CAST(md.AddressID AS NVARCHAR)
              FROM [SalesLT].[Address] md
              WHERE m.StateProvince = md.StateProvince
              ORDER BY AddressID
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
    FROM [SalesLT].[Address] m
    Group by StateProvince
    

    演示

    http://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=a1722450c70c946e9b53ae23785f4919

    【讨论】:

      【解决方案3】:

      我看不到与您收到的消息相关的错误。对于大数据,它会抱怨 8000 字节的限制。这在 MS SQL 2017、AdventureWorks 示例数据库(不是数据较少的精简版)下运行良好:

      SELECT StateProvinceID,
             STRING_AGG(cast(AddressID as varchar(MAX)), ',') WITHIN GROUP (ORDER BY AddressID) as AdressIDS
      FROM [Person].[Address] 
      GROUP BY StateProvinceID;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        相关资源
        最近更新 更多