【问题标题】:Combine two columns into one column将两列合并为一列
【发布时间】:2013-08-12 07:45:27
【问题描述】:

我在一张表中有两列。假设他们是:切尔西(作为第 1 列)和巴西(作为第 2 列)。

这两列中的行是玩家(都有 11 行)。正如我们所知,可能存在同一球员同时出现在两列的情况(例如,拉米雷斯,因为他为切尔西效力并且是巴西人)。我的问题是如何创建一个新列,其中这两列中的每个玩家都会出现(所以这个新列将有 22 行,即允许重复),而不是他们的名字,每一行都会说他们是否正确- 或左脚球员。

如果足球案例对您没有吸引力,假设我们有迈阿密热火队(第 1 列,第 5 行)和美国国家队(第 2 列,第 5 行)。在这两列中,我们显然都会有勒布朗·詹姆斯,我想创建一个新表来说明每个球员是右手还是左手(10 行)

希望有人能理解我;)

感谢您的帮助!

【问题讨论】:

  • 无,我刚刚编了一个与我的问题相关的案例
  • 如果篮球也没有吸引力怎么办?
  • 好吧,我制作这个篮球箱只是为了在不同的环境中出现同样的问题。
  • 您所描述的表格从规范化的角度来看存在严重问题。如果这是一个真实的应用程序,请考虑重构数据库,以便最终得到一个球员表和一个团队表,您可以将它们连接到一个连接表。
  • 您能否列出这些“从规范化的角度来看的严重问题”?谢谢

标签: sql join


【解决方案1】:

如果你想合并两列的结果,你应该使用联合

Select column1 from table
union all
select column2 from table;

这将产生结果。至于第二部分,它与您使用的数据库不同。但是您需要做的是将查询包装到块中,并从选择部分的该块中添加一个完成这项工作的决策。

【讨论】:

  • 对不起,不,据我所知,UNION 只会给你唯一的值,但我需要重复
  • 如果您需要重复,这意味着您做错了什么。但要实现这一点,请使用union all。然后你会有重复。
  • 因为拥有冗余信息通常是一个问题,然后是预期的解决方案。那么问题是你会从重复中获得什么好处?如果结果是中等步骤,您应该重新考虑另一种方法来消除这一步的数据重复。
  • 因为这一列是三列表的一部分,其中另外两列对于来自该列的重复项具有不同的值
  • 这是意料之中的,但您选择解决问题的策略与应有的不同。如果您关心第 3 列的信息,则应根据第 1 列做出决定,并且可能是 select 中的简单 if 语句。或者你的数据库架构真的很差,这就是为什么你需要这种奇怪的策略来产生预期的结果。
猜你喜欢
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
相关资源
最近更新 更多