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

时间:2019-01-07 18:12:43

标签: sql sql-server join union coalesce

我有2个表:batterspitchers

我要拉起

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

来自batters

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

来自pitchers

我想合并输出,以便在得到结果时像这样

playerid, firstname, lastname, throws, bats

这可能吗?我猜应该是这样,但是我已经用尽了join和union,无法获得结果集。记住他们是两个不同的表

蝙蝠

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

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

所需结果

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 个答案:

答案 0 :(得分:0)

假设:

1)您只希望没有任何限制的所有玩家列表

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

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

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

但是,我认为您的数据尚未完全标准化。这两个表实际上都是玩家列表,只是属性略有不同。因此,更明智的整体方法是仅使用一个带有列的“玩家”表,如下所示:

playerID, nameFirst, nameLast, bats, throws

如果玩家不执行此操作,则掷球和掷球都将为空。如有必要,您可以添加一个额外的“ player_type”列来表示他们的角色(击球员,投手或同时使用这两者)。

一旦有了该结构,查询就变得很简单:

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