将逗号分隔的 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
我正在为数据导出功能编写一个视图,所以基本上他们需要查看所有列及其关联的数据。
我在 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