[英]How to join two sql tables when the common column has different names but information is the same in both tables
[英]Using SQL Server 2008, how to join two tables with same column names, but different datatypes
我有两个表,一个是名为tree2009
的表和另一个tree2012
。
Tree2009
总共有3657行,并且有列:
classid(bigint, not null)
dbh(decimal(3,0),null)
zone(nvarchar(3), null)
inspect(nvarchar(10),null).
Tree2012
是一个更新的表,3839行,并有列:
classid(bigint, not null)
dbh (decimal(15,6), null)
zone(nvarchar(254), null)
inspect(datetime,null).
tree2012
的格式是首选的,所以我想将dbh
, zone
, inspect
的数据类型和结构转换为2009格式,然后根据公共列COMBINE表: classid
。
考虑到行的不同,这可能吗? 对不起,如果我没有正确解释,因为我是新手。
当你说组合时,我假设你想要一个UNION
,你可以创建一个包含两个集合的新表:
SELECT classid
, dbh
, zone
, inspect
INTO Trees
FROM Tree2012
UNION
SELECT classid
, CAST(dbh AS DECIMAL(15,6))
, CAST(zone AS NVARCHAR(254))
, CAST(inspect AS DATETIME)
FROM Tree2009
UNION
应该是ALL
如果你只想组合两个集合(忽略重复),由于防火墙问题就不能以这种方式发布, UNION
将检查并删除两个集合之间的重复行,因此更慢。
如果你只想保留Tree2012,你也可以使用INSERT
:
INSERT INTO Tree2012
SELECT classid
, CAST(dbh AS DECIMAL(15,6))
, CAST(zone AS NVARCHAR(254))
, CAST(inspect AS DATETIME)
FROM Tree2009
您不需要CAST()
每种数据类型,即示例中的区域从较短的nvarchar到较长的nvarchar。
如果您有重叠的classID,并且每个表中相同classID的值不同,那么您可能希望JOIN
并且每年有多个列:
SELECT COALESCE(a.Classid,b.Classid)'ClassID'
, a.dbh 'dbh-2012'
, a.zone 'zone-2012'
, a.inspect 'inspect-2012'
, b.dbh 'dbh-2009'
, b.zone 'zone-2009'
, b.inspect 'inspect-2009'
INTO NewTable
FROM Tree2012 a
FULL JOIN Tree2009 b
ON a.Classid = b.Classid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.