将2个数据表转换为一个表
Posted
技术标签:
【中文标题】将2个数据表转换为一个表【英文标题】:Convert 2 datatable to one table 【发布时间】:2017-03-19 16:43:53 【问题描述】:我有桌子健康:
Year | Value1 | Value2
2015 Good Good
2016 Bad Good
2017 Bad Bad
和表钱:
Year | Money1 |Money2
2014 100 200
2015 300 null
2018 500 500
我想让一个 tmp 表看起来像这样: 临时表
Year |Value1 |Value2 |Money1 |Money2
2014 Null Null 100 200
2015 Good Good 300 Null
2016 Bad Good Null Null
2017 Bad Bad Null Null
2018 Null Null 500 500
我可以在 SQL Server 中这样做吗?
【问题讨论】:
通过表之间的常规外连接,您可以获得该结果 s , left join 可以加入这两个表 【参考方案1】:使用 2 个 LEFT
连接并使用 UNION
组合来自两个 LEFT
连接的结果集。
查询
select t1.[Year], t1.[Value1], t1.[Value2], t2.[Money1], t2.[Money2]
from [Health] t1
left join [Money] t2
on t1.[Year] = t2.[Year]
union
select t1.[Year], t2.[Value1], t2.[Value2], t1.[Money1], t1.[Money2]
from [Money] t1
left join [Health] t2
on t1.[Year] = t2.[Year]
order by 1;
SQL Fiddle demo
【讨论】:
【参考方案2】:如果两个表都需要年份,那么您可以在表 Health 和 Money 之间使用外连接。
【讨论】:
【参考方案3】:是SQL查询,你可以参考一下
select A.Year,A.Value1,A.Value2, B.Money1,B.Money2 from Health A left join Money B on B.Year=A.Year
【讨论】:
这不是我想要的。 Table Health 没有年份(2014 年和 2018 年)。如果我使用 join on 或诸如 Heath.Year = Money.Year 之类的东西,我将不会从表 Health and Money 中获得一整年 你可以加入这些人的 id 而不是年份。 (获取我使用左连接的所有值)或者您可以再使用一个查询并将其合并【参考方案4】:创建您想要的表并使用连接查询来填充数据。
create table tmpTable(
Year data_type(size),
Value1 data_type(size),
Value2 data_type(size),
Money1 data_type(size),
Money2 data_type(size)
);
insert into tmpTable (Year,Value1,Value2, Money1, Money2)
select t1.Year, t1.Value1, t1.Value2, t2.Money1, t2.Money2
from Health t1
inner join Money t2 on t1.Year = t2.Year
【讨论】:
【参考方案5】:我认为您可以使用完全外连接而不是左连接来做到这一点。
select A.Year,A.Value1,A.Value2, B.Money1,B.Money2 from Health A full external join Money B on B.Year=A.Year
【讨论】:
以上是关于将2个数据表转换为一个表的主要内容,如果未能解决你的问题,请参考以下文章