簡體   English   中英

在 SQL SERVER 中以逗號分隔的列中獲取不同的值

[英]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_SPLITSTRING_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM