首页 > 解决方案 > 将两列合并/合并为 1 ( t-sql )

问题描述

我有 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

这可能吗?我猜应该是这样,但是我已经用尽了 joins 和 unions 并且无法以这种方式获得结果集。记住它们是两张不同的桌子

蝙蝠

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     

标签: sqlsql-serverjoinunioncoalesce

解决方案


假设:

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

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

一旦你有了这个结构,查询就很简单了:

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

推荐阅读