SQL查询以根据值获取列

时间:2015-06-08 05:09:22

标签: mysql sql

我有一张如下表格

user_id  | month,     | value
---------+------------+--------
1        | 2013-02-01 | 1
1        | 2013-01-01 | 0
1        | 2013-03-01 | 5
2        | 2013-02-01 | 1

据推测,user_id不能与month不止一个。{/ p>

假设我可以在查询语句中查询要查询的月份。如下所示

SELECT user_id, (bla bla bla) AS '2013-03-01', (bla bla bla) AS '2013-02-01'

如何以最少的查询和后期处理(例如使用python或php)获得如下结果?

user_id  | 2013-03-01 | 2013-02-01 | 2013-01-01 
---------+------------+------------+------------
1        | 5          | 1          | 0
2        | NULL       | 1          | NULL

1 个答案:

答案 0 :(得分:3)

您可以使用条件聚合来获取所需的结果集:

SELECT user_id,
       MAX(CASE WHEN month = '2013-03-01' THEN value END) AS '2013-03-01',
       MAX(CASE WHEN month = '2013-02-01' THEN value END) AS '2013-02-01',
       MAX(CASE WHEN month = '2013-01-01' THEN value END) AS '2013-01-01'
FROM mytable
GROUP BY user_id

只要有{em>预定义的一组month值,这就可以正常工作。否则你必须使用动态SQL。

Fiddle Demo here