首页 > 解决方案 > 在 SQL 中连接 string_split 值

问题描述

再会,

我目前正在处理一个有点混乱的 SQL 查询,我不知道如何完成我需要的最后一步。基本构造基于 3 个表:

  1. dbo.csv_export_160_Gewindefahrwerke主要数据表
  2. dbo.TecDoc附有附加信息的表格INNER JOIN
  3. dbo.KW Hinweiseìdentifier包含需要添加到主数据表中的列的表

到目前为止一切顺利,除了添加第三张桌子外,一切正常。包含要连接的数据的列是第一个表 ( ) 内的逗号分隔值,dbo.csv_export_160_Gewindefahrwerke但因行而异。像这样的东西:

  1. 5,13,​​47,64
  2. 1,10,50,55,74,88
  3. 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) o​​n Windows 10 Pro 10.0 (Build 18363:)

标签: sqlsql-servertsqlsql-server-2017

解决方案


应用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

小提琴以查看它的实际效果。


推荐阅读