sql - 在 SQL 中连接 string_split 值
问题描述
再会,
我目前正在处理一个有点混乱的 SQL 查询,我不知道如何完成我需要的最后一步。基本构造基于 3 个表:
dbo.csv_export_160_Gewindefahrwerke
主要数据表dbo.TecDoc
附有附加信息的表格INNER JOIN
dbo.KW Hinweise
ìdentifier
包含需要添加到主数据表中的列的表
到目前为止一切顺利,除了添加第三张桌子外,一切正常。包含要连接的数据的列是第一个表 ( ) 内的逗号分隔值,dbo.csv_export_160_Gewindefahrwerke
但因行而异。像这样的东西:
- 5,13,47,64
- 1,10,50,55,74,88
- 7,14,26,30,31,40
这些值需要与第三个表一一连接,dbo.KW Hinweise
以获取这些 ( dbo.KW Hinweise.Text
) 的文本。
我已经在我的另一个问题中得到了某种解决方案:SQL join on string_split values,但不知道如何实现它,所以它确实有效。有人有想法吗?
另外:这是当前查询以供参考:https ://pastebin.pl/view/8b9105ef
使用的程序:MS SQL Server Manager Studio
版本:Microsoft SQL Server 2017 (RTM-GDR) (KB4583456) - 14.0.2037.2 (X64) Nov 2 2020 19:19:59 版权所有 (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 (Build 18363:)
解决方案
应用string_split()
评论中建议的功能为我提供了以下解决方案。
样本数据
create table csv_export_160_Gewindefahrwerke
(
id nvarchar(1),
export nvarchar(200)
);
insert into csv_export_160_Gewindefahrwerke (id, export) values
('A', '5,13,47,64'),
('B', '1,10,50,55,74,88'),
('C', '7,14,26,30,31,40');
create table TecDoc
(
id nvarchar(1),
doc nvarchar(10)
);
insert into TecDoc (id, doc) values
('A', 'alpha'),
('B', 'beta'),
('C', 'gamma');
create table KW_Hinweise
(
identifier int,
description nvarchar(10)
);
insert into KW_Hinweise (identifier, description) values
(1, 'One'),
(5, 'Five'),
(7, 'Seven'),
(10, 'Ten');
解决方案
select csv.id,
csv.export,
td.doc,
s.value,
kw.description
from csv_export_160_Gewindefahrwerke csv
join TecDoc td
on td.id = csv.id
cross apply string_split(csv.export, ',') s
left join KW_Hinweise kw -- using left join because I only provide a few sample rows
on kw.identifier = s.value;
结果
id export doc value description
-- ----------------- ----- ----- -----------
A 5,13,47,64 alpha 5 Five
A 5,13,47,64 alpha 13 null
A 5,13,47,64 alpha 47 null
A 5,13,47,64 alpha 64 null
B 1,10,50,55,74,88 beta 1 One
B 1,10,50,55,74,88 beta 10 Ten
B 1,10,50,55,74,88 beta 50 null
B 1,10,50,55,74,88 beta 55 null
B 1,10,50,55,74,88 beta 74 null
B 1,10,50,55,74,88 beta 88 null
C 7,14,26,30,31,40 gamma 7 Seven
C 7,14,26,30,31,40 gamma 14 null
C 7,14,26,30,31,40 gamma 26 null
C 7,14,26,30,31,40 gamma 30 null
C 7,14,26,30,31,40 gamma 31 null
C 7,14,26,30,31,40 gamma 40 null
小提琴以查看它的实际效果。
推荐阅读
- rxjs - 从 HttpModule 中可观察的 RxJS 检索数据
- installation - 需要帮忙。很难安装 cocoapods
- python - 无法通过 python/selenium 查找/搜索链接并将它们保存到列表变量
- html - 如何在html中添加符号?
- assembly - 以下命令后的寄存器值
- javascript - 如何防止 JavaScript 将我的文本添加为数字
- ionic-framework - 如何将 Ionic v3 (3.9.1) navBar 后退按钮向右对齐?
- string - Lua string append function size versus hard-coded string
- azure - Adding users in Azure AD public client app
- neo4j - 日期时间和 iso 格式