2017-04-05 117 views
4

我想要做一个SELECT请求来获得2列VALUE(DESKTOP & MOBILE),具体取决于PLATFORM的值。MYSQL根据特定列选择多个列

下面是一个例子表:

+----+---------+------+----------+-------+ 
| ID | PROJECT | NAME | PLATFORM | VALUE | 
+----+---------+------+----------+-------+ 
| 1 |  1 | Foo | desktop |  1 | 
| 2 |  1 | Foo | mobile | 42 | 
| 3 |  1 | Bar | desktop |  3 | 
| 4 |  1 | Bar | mobile | 10 | 
| 5 |  2 | Foo | desktop |  2 | 
| 6 |  2 | Bar | mobile |  9 | 
+----+---------+------+----------+-------+ 

所需的输出:

+---------+------+---------+--------+ 
| PROJECT | NAME | DESKTOP | MOBILE | 
+---------+------+---------+--------+ 
|  1 | Foo | 1  | 42  | 
|  1 | Bar | 3  | 10  | 
|  2 | Foo | 2  | NULL | 
|  2 | Bar | NULL | 9  | 
+---------+------+---------+--------+ 

我试了一下:

SELECT project, name, 
(CASE platform WHEN 'desktop' THEN value END) AS "desktop", 
(CASE platform WHEN 'mobile' THEN value END) AS "mobile" 
FROM test 
GROUP BY name, project 
ORDER BY project, value ASC 

+---------+------+---------+--------+ 
| project | name | desktop | mobile | 
+---------+------+---------+--------+ 
|  1 | Foo | 1  | NULL | 
|  1 | Bar | 3  | NULL | 
|  2 | Foo | 2  | NULL | 
|  2 | Bar | NULL | 9  | 
+---------+------+---------+--------+ 
+0

你超近:-) – Sebas

+0

你有什么建议吗? D:@Sebas – Jack

回答

2

试试这个:

SELECT project, NAME, MAX(desktop) AS desktop, MAX(mobile) AS mobile FROM (
    SELECT project, NAME, 
    (CASE platform WHEN 'desktop' THEN VALUE END) AS "desktop", 
    (CASE platform WHEN 'mobile' THEN VALUE END) AS "mobile" 
    FROM test 
    ) AS aa 
GROUP BY aa.NAME, aa.project 
ORDER BY aa.project 

说明:

首先你要的所有数据的选择(AA),根据平台的内容不断扩大值。

然后您使用该选择作为分组数据的来源。

结果:

project name desktop mobile 
1  Foo  1  42 
1  Bar  3  10 
2  Foo  2  NULL 
2  Bar  NULL 9