combine/merge 两列合并为 1 ( t-sql )

combine/merge two columns into 1 ( t-sql )

我有 2 个 table:batterspitchers

我要拉

playerid(nvarchar50), firstname(nvarchar50), lastname(nvarchar50), bats(nvarchar50)

来自batterstable

playerid(nvarchar50), firstname(nvarchar50), lastname(nvarchar50), throws(nvarchar50)

来自 pitchers table

我想合并输出,这样当我得到结果时它就会像这样出现

playerid, firstname, lastname, throws, bats

这可能吗?我猜应该是这样,但我已经用尽了连接和联合,无法让结果集以这种方式出现。请记住它们是两个不同的 tables

bat table

playerID    nameFirst   nameLast    bats
----------------------------------------
abreubo01   Bobby       Abreu       L
abreujo02   Jose        Abreu       R
abreuto01   Tony        Abreu       B
ackledu01   Dustin      Ackley      L
adamecr01   Cristhian   Adames      S
adamsla01   Lane        Adams       R
adamsma01   Matt        Adams       L

table

playerid    nameFirst   nameLast    throws
------------------------------------------
abadfe01    Fernando    Abad        L
aceveal01   Alfredo     Aceves      R
achteaj01   A.J.        Achter      R
adamsau01   Austin      Adams       R
adamsmi03   Mike        Adams       R
adcocna01   Nathan      Adcock      R
affelje01   Jeremy      Affeldt     L

想要的结果

table

playerid    nameFirst   nameLast    throws  Bats
------------------------------------------------
abadfe01    Fernando    Abad              
aceveal01   Alfredo     Aceves              
achteaj01   A.J.        Achter             
adamsau01   Austin      Adams       
adamsmi03   Mike        Adams      
adcocna01   Nathan      Adcock     
affelje01   Jeremy      Affeldt     

假设:

1) 你只想要一个没有任何限制的所有玩家的列表

2) 相同的玩家 ID 永远不会出现在两个 table 中(或者如果出现,您不关心它们是否被列出两次)

基于这些假设,您可以简单地写成:

SELECT playerID, nameFirst, nameLast, bats, NULL as throws
FROM bats
UNION ALL
SELECT playerID, nameFirst, nameLast, NULL as bats, throws
FROM pits

但是,我认为您的数据没有完全规范化。这两个 table 实际上都是玩家列表,只是他们的属性略有不同。因此,更明智的总体方法是简单地使用一个 "players" table 列,如下所示:

playerID, nameFirst, nameLast, bats, throws

击球和投球都可以为空,以防玩家不执行该动作。如有必要,您可以添加一个额外的 "player_type" 列来表示他们的角色(击球手、投手或两者,如果允许的话)。

获得该结构后,查询就很简单了:

SELECT playerID, nameFirst, nameLast, bats, throws
FROM players