sql - 将两列合并/合并为 1 ( t-sql )
问题描述
我有 2 张桌子:batters
和pitchers
我想拉
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
解决方案
假设:
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
推荐阅读
- windows - 如何在 .bat 脚本运行期间忽略基于文件名的文件删除?
- javascript - 如何在 Vue.js 中制作背景模糊的工具提示?
- webkit - WKWebView 不适用于 evaluateJavaScript() 表单提交
- r - Rstudio 软件包未更新
- syntax-error - 部分查询失败:内存不足 - Kusto
- java - 如何在特定日期和特定时间设置通知?
- swift - 为什么我的 for-in 循环不起作用?错误处理 Swift
- flutter - 如何使用 file_picker 包在 Flutter App 的屏幕上显示从画廊中选择的多个视频?
- python - 如何在 Azure 资源资源管理器的附加登录参数中添加多个资源
- flutter - 参数类型“int”不能分配给参数字符串颤动