簡體   English   中英

使用SQL Server 2008,如何連接具有相同列名但具有不同數據類型的兩個表

[英]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的格式是首選的,所以我想將dbhzoneinspect的數據類型和結構轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM