Как переупорядочить значения в алфавитном порядке с помощью T-SQL? - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужно изменить порядок значений в строках таблицы в алфавитном порядке, например:

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');

1 Ответ

1 голос
/ 24 апреля 2019

Если вы используете SQL Server 2017 или более позднюю версию, мы можем использовать комбинацию STRING_SPLIT и STRING_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 в отдельной строке, вам следует остановиться, потому что тогда ваши данные уже нормализованы или, по крайней мере, намного ближе к нему.

...