首页 > 解决方案 > SQL - 在 Mysql 中将一列拆分为两列

问题描述

我有这张桌子。考虑到 id 从 0 开始。

表格1

身份证件
1个
2乙
3℃
4 天
6 乙

我需要以下输出

Col1 Col2
空
公元前
D 空
E 空

我尝试使用带有 id、id - 1 和 id + 1 的 union,但我不知道如何根据 id 获取字母,还尝试了一些奇怪的逻辑,但没有任何效果。

任何帮助表示赞赏。

谢谢

标签: mysqlsql

解决方案


您没有发布数据库引擎,所以我假设 PostgreSQL 的模数操作数是%.

查询应该是:

select o.letter, e.letter
  from (
    select id, letter, id as base from my_table where id % 2 = 0
  ) o full outer join (
    select id, letter, (id - 1) as base from my_table where id % 2 <> 0
  ) e on e.base = o.base
  order by coalesce(o.base, e.base)

由于我无法在 MySQL 5.6 中对其进行测试,因此请谨慎选择以下选项。在没有完全外连接的情况下,您可以执行两个外连接,然后您可以合并它们,如下所示:

select * from (
  select o.base, o.letter, e.letter
    from (
      select id, letter, id as base from my_table where id % 2 = 0
    ) o left join (
      select id, letter, (id - 1) as base from my_table where id % 2 <> 0
    ) e on e.base = o.base
  union
  select e.base, o.letter, e.letter
    from (
      select id, letter, id as base from my_table where id % 2 = 0
    ) o right join (
      select id, letter, (id - 1) as base from my_table where id % 2 <> 0
    ) e on e.base = o.base
) x
order by base

推荐阅读