string - 如何使用 T-SQL 按字母顺序对一行中的值进行重新排序?
问题描述
我需要按字母顺序重新排列表格行中的值,例如:
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_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
放在单独的行上,您应该停止,因为那时您的数据已经标准化,或者至少更接近它。
推荐阅读
- python - 导入 wordnet 和停用词时出现 chaquopy 错误
- swift - Nike Hybrid 表盘的复杂功能系列(环形文字)
- reactjs - 在 useEffect 中调用 useState setter 时不更新状态
- javascript - NetSuite https.post() 方法响应给出错误“解析值时遇到意外字符:S. Path '', line 0, position 0”
- python - 如何从仅包含该字典的列表中提取字典?
- python - 如何计算列表中列表中元素的数量?
- reactjs - 在 React 中单击按钮时删除 cookie 弹出窗口不起作用
- android - 调整布局以占据屏幕的百分比
- flutter - 使用 Stream Builder 创建列表视图
- android - 离子/电容器 - PushNotiifcations - Android - “通知” + “数据” 消息