简体   繁体   English

将两行结果合并为一行MYSQL

[英]Merge two row results into one row MYSQL

I have a table having following structure: 我有一个具有以下结构的表:

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

Now I want my result for the pid parameter in format for email_type[1 & 2] only: 现在,我只希望将pid参数的结果的格式设置为email_type[1 & 2]

Case pid=1 情况pid=1

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

Case pid=2 情况pid=2

| 2   | ab      | NULL    |

Case pid=3 情况pid=3

| 3   | NULL    | cd      |

Here email_p represents email_type=1 & email_w represents email_type=2 这里email_p代表email_type=1 ,而email_w代表email_type=2

I am using following query, and its working fine except for a case pid=2 . 我正在使用以下查询,除了大小写pid=2以外,它的工作正常。 Case I & Case III are successfully fetched. 成功获取案例I和案例III。 Please provide some solution with good explanation(if possible). 请提供一些具有良好解释的解决方案(如果可能)。

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)

It fails when e.pid = 2 and it returns empty result set & please provide solution e.pid IN (1,2,3) holds good for required format.#MYSQL e.pid = 2时失败,并且返回空结果集并请提供解决方案e.pid IN (1,2,3)适合所需格式。#MYSQL

Try This 尝试这个

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 SQL小提琴演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM