String 如何使用T-SQL按字母顺序对行中的值重新排序?

String 如何使用T-SQL按字母顺序对行中的值重新排序?,string,tsql,data-manipulation,String,Tsql,Data Manipulation,我需要按字母顺序重新排列表行中的值,例如: Id Values -------------------------------- 1 Banana, Apple, Oranges 2 Oranges, Melon, Cucumber 3 Cucumber, Banana, Apple 预期产出应为: Id Values -------------------------------- 1 Apple, Banana, Oran

我需要按字母顺序重新排列表行中的值,例如:

Id      Values
--------------------------------
1       Banana, Apple, Oranges
2       Oranges, Melon, Cucumber
3       Cucumber, Banana, Apple
预期产出应为:

Id      Values
--------------------------------
1       Apple, Banana, Oranges
2       Cucumber, Melon, Oranges
3       Apple, Banana, Cucumber
您可以使用以下代码生成上述数据:

CREATE TABLE [Table] (
  [Id] INT NOT NULL,
  [Values] VARCHAR(30) NOT NULL,
  CONSTRAINT [PK_Table_Id] PRIMARY KEY CLUSTERED ([Id])
);
GO
INSERT INTO [Table] ([Id], [Values]) VALUES (1, 'Banana, Apple, Oranges'),(2, 'Oranges, Melon, Cucumber'),(3, 'Cucumber, Banana, Apple');


如果您使用的是SQL Server 2017或更高版本,我们可以结合使用
STRING\u SPLIT
STRING\u AGG

WITH cte AS (
    SELECT Id, value  
    FROM [Table]
    CROSS APPLY STRING_SPLIT([Values], ', ')
)

SELECT
    Id,
    STRING_AGG(value, ', ') WITHIN GROUP (ORDER BY value) AS [Values]
FROM cte
GROUP BY Id
ORDER BY Id;

但是,我郑重建议您停止上面的CTE步骤,因为从一开始就在表中存储CSV值是个坏主意。因此,一旦您将每个
Id
的每个值放在单独的一行上,您就应该停止,因为这样您的数据就已经标准化了,或者至少离它更近了。

到目前为止您尝试了什么?请在问题本身中举个例子。阅读,你会看到很多原因,为什么这个问题的答案绝对是肯定的!您使用的是哪个版本的SQL Server?我正在运行SQL Server 2017@Zohar Peled,我在行中使用逗号分隔的列表来动态运行azure数据工厂中的存储过程。Tim Biegeleisen提供的建议非常有用。如果我们要实现这一点,还有待观察。因为在2017中很容易从表行中创建逗号分隔的字符串(如提姆的答案所示),我强烈建议您至少考虑规范数据库。仅此一项就值得投票表决。