【问题标题】:ORDER BY in Comma Delimited List Using SELECT Clause使用 SELECT 子句的逗号分隔列表中的 ORDER BY
【发布时间】:2013-07-23 23:28:22
【问题描述】:

我正在使用以下代码来创建逗号分隔列表。

我想要列表的特定顺序:

USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name
FROM Production.Product
SELECT @listStr
GO

当我尝试喜欢时

USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name
FROM Production.Product
ORDER BY sortOrder
SELECT @listStr
GO

显示错误incorrect syntax near ' ORDER'

【问题讨论】:

  • 什么是sortOrder??它没有在任何地方定义,也没有出现在表格中
  • sortOrder 是我表中的列名
  • 确保您的文本中没有任何无效字符。无效字符可能来自代码的复制粘贴,并且可能显示为“空格”,但实际上解释器不会以这种方式看到。
  • 您的查询工作正常 (SQLFiddle demo)。确保“BY”是英文符号,并且 ORDER 和 BY 之间没有特殊符号
  • @Petio lvanov, valex 这是我发布的代码示例,但实际上我也在使用 Join ,可能是导致错误&我没有得到任何拼写错误

标签: sql sql-server sql-order-by csv


【解决方案1】:

使用STUFF() 得到相同的逗号分隔结果

USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)

SELECT @listStr = STUFF((SELECT  ',' + Name
            FROM Production.Product
            ORDER BY sortOrder
       FOR XML PATH('')), 1, 1, '')

SELECT @listStr
GO

【讨论】:

  • STUFF 只是将第一个 ',' 替换为空字符串,它是创建逗号分隔列表的 FOR XML 子句。
【解决方案2】:

我不相信您可以在获得标量值时下订单。而且您不应该需要它,因为您只期望一个值。

【讨论】:

  • 我在询问 @listStr 变量中被分隔的值的顺序
【解决方案3】:

几乎每次您在看似正确的脚本或从其他地方复制和粘贴的脚本中看到“附近有不正确的语法”时,您可能在文本中包含不可见的无效字符,并显示为空白. 我的建议是打开一个新窗口并手动重新输入整个查询,或者尝试猜测无效字符的位置以清理它们。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 2016-06-10
    • 2017-02-14
    • 2011-11-18
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多