2017-04-05 77 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