combine/merge 两列合并为 1 ( t-sql )
combine/merge two columns into 1 ( t-sql )
我有 2 个 table:batters
和 pitchers
我要拉
playerid(nvarchar50), firstname(nvarchar50), lastname(nvarchar50), bats(nvarchar50)
来自batters
table
和
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
我有 2 个 table:batters
和 pitchers
我要拉
playerid(nvarchar50), firstname(nvarchar50), lastname(nvarchar50), bats(nvarchar50)
来自batters
table
和
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