代码之家  ›  专栏  ›  技术社区  ›  user8834780

将多个表中的数据组合为一列

  •  1
  • user8834780  · 技术社区  · 6 年前

    表A的当前输出如下所示:

    id  event        timestamp              registered acct_add funded applied 
    1   Register     5/18/2018 4:00:00 AM   1         0         0      0 
    1   AddAccount   5/18/2018 5:00:00 AM   0         1         0      0
    1   Funded       5/18/2018 6:00:00 AM   0         0         1      0 
    2   Register     5/18/2018 7:00:00 AM   1         0         0      0
    2   AddAccount   5/18/2018 8:00:00 AM   0         1         0      0
    2   Funded       5/18/2018 9:00:00 AM   0         0         1      0 
    

    的值 event 应该是:

    'Register', 
    'AddAccount',
    'Funded',
    'Applied'(*)
    

    事实证明,直到某个特定的日期,最后一个事件才发生。但是,表B有两列: id , application_date ,可以转化为:

    id  application_date       applied 
    1   5/18/2018 6:30:00 AM   1         
    2   5/18/2018 9:30:00 AM   1     
    

    实际上,我的查询是5+表和100+行代码的组合,所以您能建议我如何将这两个表组合在一起以包含一个视图吗? 最好没有工会 这样:

    id  event        timestamp              registered acct_add funded applied 
    1   Register     5/18/2018 4:00:00 AM   1         0         0      0 
    1   AddAccount   5/18/2018 5:00:00 AM   0         1         0      0
    1   Funded       5/18/2018 6:00:00 AM   0         0         1      0 
    1   Applied      5/18/2018 6:30:00 AM   0         0         0      1 
    2   Register     5/18/2018 7:00:00 AM   1         0         0      0
    2   AddAccount   5/18/2018 8:00:00 AM   0         1         0      0
    2   Funded       5/18/2018 9:00:00 AM   0         0         1      0 
    2   Applied      5/18/2018 9:30:00 AM   0         0         0      1 
    

    谢谢您!

    2 回复  |  直到 6 年前
        1
  •  2
  •   user9824134    6 年前

    这是对影响者对阶段表B的回答的一个调整,与表A的顺序相同,单引号硬文本,并将最后的0修改为1,以表明该ID被肯定地应用。

    select * from (
      select * from table_a
      union all select id, 'Applied', application_date,  0, 0, 0, 1 from table_b
      ) all_rows
    order by id, timestamp;
    

    我本想对你的回答发表评论,但我还不能发表评论。

        2
  •  1
  •   The Impaler    6 年前

    使用 union all 解决方案看起来很简单:

    select * from (
      select * from table_a
      union all select id, 'Applied', application_date,  0, 0, 0, 1 from table_b
      ) all_rows
    order by id, timestamp;