sql - 从带有附加条件的不相关表中插入 INTO
问题描述
我现在正在学习SQL Server,我必须做一个项目,但是我有一个我无法解决的问题。我有三个不相关的表。这些是:
昏暗状态
id, stateName
1,Alabama
2,Alaska
3,Arizona
...
DimTime(在这些日期发生的事件,我稍后会分析)
id, fullDate, Year
1,2016-02-11, 2016
2,2016-04-21, 2016
3,2017-01-02, 2017
4,2017-01-03, 2017
...
人口
state, 2016,2017,2018
Alabama, 559330, 567020, 572001
Alaska, 347192, 351932, 349889
Arizona, 452779, 454559, 455419
我为结果创建了第四个表
昏暗状态人口
id, StateID, Year, Population
现在我的问题是:如何将值从以前的表中插入到第四个表中?我需要每年每个州的人口以及该州的 ID 和日期。结果应如下所示:
昏暗状态人口
id, StateID, Year, Population
1, 1,1, 559330
2, 1,2, 567020
3, 2,1, 347192
4, 2,2, 351932
当然,解决方案可以不同,我只需要能够分析人口变化
解决方案
您可以通过几种方式实现这一点,但这里有一个简单的解决方案:
我根据您的数据创建了三个表:
昏暗状态
Id StateName
1 Alabama
2 Alaska
3 Arizona
昏暗时间
Id FullDate Year
1 2016-02-11 2016
2 2016-04-21 2016
3 2017-01-02 2017
4 2017-01-03 2017
人口
State 2016 2017 2018
Alabama 10 20 30
Alaska 15 30 45
Arizona 20 40 60
使用以下代码删除您的枢轴:
WITH _Population AS (
SELECT [State], [Year], [Population]
FROM [Population]
UNPIVOT
([Population] FOR [Year] IN
([2016], [2017], [2018])
) AS UNPVT
)
此后,您可以使用您提到的关系连接所有相关表,尽管您的 Population 表上没有主键/外键。
-- INSERT INTO EXISTING_TABLE
SELECT DT.Id, StateName, FullDate, DT.[Year], [Population]
-- INTO #NEW_TABLE
FROM DimState DS
INNER JOIN DimTime DT ON DT.Id = DS.Id
INNER JOIN _Population P ON P.State = DS.StateName
我已经评论了关于如何插入现有表或在插入数据时创建新表的注释。
您的整个解决方案如下所示:
WITH _Population AS (
SELECT [State], [Year], [Population]
FROM [Population]
UNPIVOT
([Population] FOR [Year] IN
([2016], [2017], [2018])
) AS UNPVT
)
-- INSERT INTO EXISTING_TABLE
SELECT DT.Id, StateName, FullDate, DT.[Year], [Population]
-- INTO #NEW_TABLE
FROM DimState DS
INNER JOIN DimTime DT ON DT.Id = DS.Id
INNER JOIN _Population P ON P.State = DS.StateName
推荐阅读
- c# - 如何在项目 appsettings.json 中配置多个 QnA 模型?
- c# - 验证小数精度
- angular - 当使用 Angular 7 单击一行中的链接时,我们如何在 mat-table 中创建子表?
- javascript - 浮动下拉元素相互向右推
- java - 如何在特定网站上接受 cookie?
- javascript - webscokets 如何连接到集群内正确的子进程?
- android - Proguard 破解了 react native android
- symfony - Symfony - ArrayCollection - 更新或创建
- python - 从数组字典创建 DataFrame
- specifications - 冒号符号可以与 Z 规范语言中的集合成员符号互换吗?