[英]Getting distinct values in comma separated column in 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_AGG
如此,您可以使用STRING_SPLIT
和STRING_AGG
來做到這STRING_AGG
。 請注意,由於STRING_SPLIT
不返回序號值,因此將值添加回字符串的順序不太可能遵循原始序號位置。
我還假設您使用的是完全受支持的 SQL Server 版本,沒有相反的證據。 如果沒有,您將需要分別為這兩個函數使用用戶定義的拆分器函數和FOR XML PATH
方法。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.