sql - 使用三个源表的 N 对 N 关系
问题描述
我是一名学生,我正在做一个项目,但我有一个问题,我无法解决。我有一张表,其中包含从 csv 文件导入的行,一张表包含事实(GunViolences)和一张表(类别 - 死亡和受伤)。在原始表(从 csv 文件导入)中,我有表描述,并且有长字符串,其中的子字符串死亡或受伤。现在我必须以某种方式将事实表与维度表联系起来,具体取决于暴力类别。我创建了另一个名为 ViolenceCategories 的表来通过 ID 连接这些表,但我不知道如何填写此表。
结构:
表 FromCSV
id, date, description, address
1,12-01-2002, Shot|shotgun, address1
2,19-04-2003, injured, address2
3, 21-10-2004, shot|injured, address3
桌枪暴力
id, date, address
1, 12-01-2002, address1
2,19-04-2003, address2
3, 21-10-2004, address3
表 DimCategories
id, category
1, shot
2, injured
餐桌暴力分类
idFact, idDim
1,1
2,2
3,2
3,1
如何填写表格 VIolenceCategories?
编辑我创建了另一个表来分隔列的值和描述
表尺寸说明
id, desc1, desc2
1, Shot, shotgun
2, injured, null
3, shot, injured
解决方案
在 SQL Server 2016 及更高版本中,您可以使用表运算符STRING_SPLIT()
来实现此目的。该函数会将记录中的分隔字符串拆分为每个子字符串的新行。考虑:
SELECT *
FROM FromCSV
CROSS APPLY STRING_SPLIT(description, '|') AS descriptions
+----+------------+---------------------+----------+-------------+
| id | date | description | address | value |
+----+------------+---------------------+----------+-------------+
| 1 | 12-01-2002 | Shot|shotgun | address1 | Shot |
| 1 | 12-01-2002 | Shot|shotgun | address1 | shotgun |
| 2 | 19-04-2003 | three shots|injured | address2 | three shots |
| 2 | 19-04-2003 | three shots|injured | address2 | injured |
| 3 | 21-10-2004 | shot|injured | address3 | shot |
| 3 | 21-10-2004 | shot|injured | address3 | injured |
+----+------------+---------------------+----------+-------------+
把它变成一个插入语句来填充你的ViolenceCategories
表看起来像:
INSERT INTO ViolenceCategories
SELECT t1.id, t2.id
FROM
(
SELECT id, value
FROM FromCSV
CROSS APPLY STRING_SPLIT(description, '|') AS descriptions
) t1
INNER JOIN DimCategories t2 ON t1.value = t2.category
推荐阅读
- c++ - 如何找到数组中元素的总和
- c - 在循环中定义一个 var
- python - 如何在 x 轴上绘制具有 2 个变量并在 y 轴上计数的图形?
- node.js - 如何在同一页面上显示 flash 消息而不渲染或擦除 express js 教科书中的值
- python - 如何用 int 修改 LpVariable?
- r - 使用 rtweet 抓取推文:如何获取地理位置(lookup_coords)?
- spring - 在 Kotlin + Spring Boot 教程项目中,Gradle 同步失败
- r - 绘制 R 中个人对代码更改的参与
- typescript - 如何从键值对数组初始化 Map
- html - 我的导航栏上的下拉 div 的小问题 :(