【问题标题】:Merge two row results into one row MYSQL将两行结果合并为一行MYSQL
【发布时间】:2014-04-17 05:08:24
【问题描述】:

我有一个具有以下结构的表:

| pid | email | email_type |
| 1   | x     | 1          |
| 1   | y     | 2          |
| 1   | z     | 3          |
| 2   | ab    | 1          |
| 3   | cd    | 2          |

现在我想要pid 参数的结果,格式仅适用于email_type[1 & 2]

案例pid=1

| pid | email_p | email_w |
| 1   | x       | y       |

案例pid=2

| 2   | ab      | NULL    |

案例pid=3

| 3   | NULL    | cd      |

这里email_p代表email_type=1&email_w代表email_type=2

我正在使用以下查询,除了 pid=2 的情况外,它工作正常。案例 I 和案例 III 已成功获取。请提供一些具有良好解释的解决方案(如果可能的话)。

SELECT `e`.`pid`, `e`.`email` AS `email_p`, `e1`.`email` AS `email_w` FROM `table1` AS `e` LEFT JOIN `table1` AS `e1` ON e.pid=e1.pid AND e1.email_type=2 WHERE (e.pid IN (1) AND e.email_type=1)

e.pid = 2 失败并返回空结果集&请提供解决方案e.pid IN (1,2,3) 适用于所需格式。#MYSQL

【问题讨论】:

    标签: mysql sql join self-join


    【解决方案1】:

    试试这个

    SELECT pid,
           MAX(CASE WHEN email_type=1 THEN email END ) as email_p ,
           MAX(CASE WHEN email_type=2 THEN email END ) as email_w 
    FROM tableName
    WHERE email_type IN (1,2)
    GROUP BY pid
    

    SQL Fiddle DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      相关资源
      最近更新 更多