将两个垂直表合并到一个水平表

Merging two vertical tables onto one horizontal table(将两个垂直表合并到一个水平表)
本文介绍了将两个垂直表合并到一个水平表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

表格定义

Table 1 (horizo​​ntal) 这是一个用户表

Table 1 (horizontal) This is a table of users

| id | name | phone |
---------------------
| 1  | Bob  | 800   |
| 2  | Phil | 800   | 

Table 2 (Vertical Table) 这是一个团队表

Table 2 (Vertical Table) This is a table of teams

| id | name      |
------------------
| 1  | Donkey    |
| 2  | Cat       |  

Table 3 (Vertical Table) 此表连接前两个

Table 3 (Vertical Table) This table is connecting the first two

| id | user_id | team_id |
--------------------------
| 1  |    1    |   1     |
| 2  |    1    |   2     |
| 3  |    2    |   1     |

<小时>

我的目标

我希望能够以返回以下信息的方式查询数据:

I would like to be able to query the data in such a way that i get the following back:

| id | name | phone | Donkey | Cat  |
-------------------------------------
| 1  | Bob  | 800   | 1      | 1    |
| 2  | Phil | 800   | 1      | Null |

此表将包含我的水平表数据,然后是其他两个垂直表的组合以创建附加列.表 2 最终成为列名标题.并且行值作为布尔值从表三中提取.

This table would have my horizontal table data, then a combination of the other two vertical tables to create the appended columns. Where table 2 ends up being the column name headings. And the row valus are pulled from table three as a boolean.

推荐答案

您正在寻找数据透视表:

You're chasing a pivot table:

select u.*, 
  sum(case when t1.name = 'Donkey' then 1 else 0 end) Donkey, 
  sum(case when t1.name = 'Cat' then 1 else 0 end) Cat
  from users u
    inner join user_team ut1
      on u.id = ut1.user_id  
    inner join teams t1
      on ut1.team_id = t1.id
  group by name

演示:http://sqlfiddle.com/#!9/5fd33/7

这篇关于将两个垂直表合并到一个水平表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)