sql - 在 SQL SERVER 的逗号分隔列中获取不同的值
问题描述
我正在使用 SQL SERVER 版本 15.0.18390.0
我有一个带有这样的列的数据框,其中有动物的逗号分隔值。如何更改数据框以从输入中输出以逗号分隔的独特动物列表?
输入:
column1
dog,cat,dog,dog
dog,dog,bird,cat
panda,bird,cat
预期输出:
column1
dog,cat
dog,bird,cat
panda,bird,cat
解决方案
真正的解决方案:
修复您的设计。
这里真正的问题是,为什么首先要在数据库中存储分隔数据?那是您真正的问题,因此真正的解决方案是修复您的设计。规范化您的数据,不要存储分隔数据。它打破了(关系)数据的多个基本规则。移动到具有多对一/多关系的多个表。
话虽如此,但您可以使用STRING_SPLIT
and来做到这一点STRING_AGG
。请注意,由于STRING_SPLIT
不返回序数值,因此将值添加回字符串的顺序不太可能遵循原始序数位置。
我还假设您使用的是完全受支持的 SQL Server 版本,但没有相反的证据。如果没有,您将需要分别使用用户定义的拆分器函数和FOR XML PATH
2 个函数的方法。
WITH DistinctValues AS(
SELECT DISTINCT
V.DenormalisedData,
SS.[Value]
FROM (VALUES('dog,cat,dog,dog'),
('dog,dog,bird,cat'),
('panda,bird,cat'))V(DenormalisedData)
CROSS APPLY STRING_SPLIT(V.DenormalisedData,',') SS)
SELECT STRING_AGG(DV.[Value],',') AS RedenormalisedData
FROM DistinctValues DV
GROUP BY DenormalisedData;
推荐阅读
- python - 在 Python 上运行的语法错误
- arrays - 命令在终端中工作,但不在 Bash 脚本中
- python - 如何将多个元素附加/扩展到一个数组中?
- jquery - 当用户单击表单按钮时显示模式并在用户单击 codeigniter 中的模式按钮时提交表单
- python - 在 otree 游戏设计中使用 Django 将数据从表单保存到数据库
- ios - IOS天气应用
- node.js - node.js then() 不工作
- python - xgboost回归预测相同的值
- java - 使用 new File(directory).mkdir() 创建文件时出错
- java - Java Compute C(n,k) 和使用 biginteger 的阶乘