将逗号分隔的 id 转换为其分配的值

Convert Comma separated ids into its assigned values

我正在为数据导出功能编写一个视图,所以基本上他们需要查看所有列及其关联的数据。

我在 table Languages Spoken 中有一列,我们将值存储为逗号分隔列表 1,2,3 ....等,

其中 1 是英语,2 是德语,3 是西班牙语等。这个值存储在不同的 table。

StaffID       LanguagesSpoken
----------      -------------
1               1,2,3
2               3,4
3               2,5

所以当我们想要查看时,预期的结果应该是

StaffID       LanguagesSpoken
----------      -------------
1               English, Germany, Spanish
2               Spanish,Hindi
3               Germany,Arabic

您可以使用以下方法拆分 LanguagesSpoken 字符串,使用 Language table 进行连接并使用 string_agg 获得您想要的结果。正如其他人所提到的,您的架构设计需要修复,因此这也将帮助您将数据导入新架构:

SELECT StaffID, value
FROM StaffLanguagesSpoken
CROSS APPLY string_split(LanguagesSpoken, ",")

对于包含如下语言的 table:

CREATE TABLE languages (
  id INTEGER,
  name VARCHAR(20)
);

INSERT INTO languages
  (id, name)
VALUES
  ('1', 'English'),
  ('2', 'Germany'),
  ('3', 'Spanish'),
  ('4', 'Hindi'),
  ('5', 'Arabic');

您可以加​​入 tables,按 StaffID 分组并使用 string_agg()

select
  t.StaffID, 
  string_agg(l.name, ',') within group (order by l.id) LanguagesSpoken
from tablename t inner join languages l
on concat(',', t.languagesspoken, ',') like concat('%,', l.id, ',%')
group by t.StaffID

参见demo
结果:

> StaffID | LanguagesSpoken        
> ------: | :----------------------
>       1 | English,Germany,Spanish
>       2 | Spanish,Hindi          
>       3 | Germany,Arabic