Sql server 有没有一种方法可以对STUFF/forxml路径中的数值进行排序?

Sql server 有没有一种方法可以对STUFF/forxml路径中的数值进行排序?,sql-server,tsql,Sql Server,Tsql,我正在使用STUFF和FOR XML PATH来列出列中的值,它工作得很好。我使用的是DISTINCT,否则我会得到副本;我唯一的问题是,它给了我按字母顺序列出的值,我希望它们以数字形式列出。例如,我得到了5569,6,我希望是5569。我尝试过使用orderby,但由于其独特的。下面的代码实际上是一个更大的查询的一部分,它有多个连接,这就是为什么我在几个地方有不同的连接。 有人能给我指一下正确的方向吗 SELECT DISTINCT IndData.UserID, STUFF

我正在使用STUFF和FOR XML PATH来列出列中的值,它工作得很好。我使用的是DISTINCT,否则我会得到副本;我唯一的问题是,它给了我按字母顺序列出的值,我希望它们以数字形式列出。例如,我得到了5569,6,我希望是5569。我尝试过使用orderby,但由于其独特的。下面的代码实际上是一个更大的查询的一部分,它有多个连接,这就是为什么我在几个地方有不同的连接。 有人能给我指一下正确的方向吗

SELECT  DISTINCT IndData.UserID,
        STUFF ((
            SELECT DISTINCT ', ' + CAST(InnerTable.AgentID AS varchar(6))
            FROM 
            IndData AS InnerTable
            WHERE InnerTable.UserID = IndData.UserID
            FOR XML PATH('')
            ),1,2,'' )
        AS [AgentIDs]

如果列表中的值已经不同,可以按如下方式应用顺序

SELECT  DISTINCT IndData.UserID,
        STUFF ((
            SELECT ', ' + CAST(InnerTable.AgentID AS varchar(6))
            FROM 
            IndData AS InnerTable
            WHERE InnerTable.UserID = IndData.UserID
            ORDER BY InnerTable.AgentID
            FOR XML PATH('')
            ),1,2,'' )
        AS [AgentIDs]
如果agentID是不明确的,您可以拥有一个包含明确记录的内部表,然后您可以通过下订单,您可以检查以下示例


如果列表中的值已经不同,可以按如下方式应用顺序

SELECT  DISTINCT IndData.UserID,
        STUFF ((
            SELECT ', ' + CAST(InnerTable.AgentID AS varchar(6))
            FROM 
            IndData AS InnerTable
            WHERE InnerTable.UserID = IndData.UserID
            ORDER BY InnerTable.AgentID
            FOR XML PATH('')
            ),1,2,'' )
        AS [AgentIDs]
如果agentID是不明确的,您可以拥有一个包含明确记录的内部表,然后您可以通过下订单,您可以检查以下示例


将order by添加到子查询中。这是用于聚合字符串的技术之一。SQL Server 2017。为此而引入。即使在早期版本中,也可以在数据转换为字符串之前在内部查询中添加ORDER BY子句。将ORDER BY添加到子查询中。这是用于聚合字符串的技术之一。SQL Server 2017。为此而引入。即使在早期版本中,您也可以在数据转换为字符串之前,在内部查询中添加ORDERBY子句。谢谢!我想投你一票,但我是新来的,所以我不能。第一个不起作用,我得到了这个错误:如果指定了select DISTINCT,ORDER BY items必须出现在select列表中。所以我使用了你的示例2,它非常有效。在我针对自己的情况对其进行了修改后,它看起来是这样的:STUFF SELECT','+CASTAgentID AS varchar6从IndData AS InnerTable中选择DISTINCT InnerTable.AgentID作为InnerTable,其中InnerTable.UserID=IndData.UserID t按AgentID排序XML路径,1,2作为[AgentID]如果要在内部查询库中使用order by,则需要删除DISTINCT!我想投你一票,但我是新来的,所以我不能。第一个不起作用,我得到了这个错误:如果指定了select DISTINCT,ORDER BY items必须出现在select列表中。所以我使用了你的示例2,它非常有效。在我针对自己的情况对其进行了修改后,它看起来是这样的:STUFF SELECT','+CASTAgentID AS varchar6从IndData AS InnerTable中选择DISTINCT InnerTable.AgentID作为InnerTable,其中InnerTable.UserID=IndData.UserID t按AgentID排序XML路径,1,2作为[AgentID]如果要在内部查询中使用order by,则需要删除DISTINCT