MySQL:查询根据另一列的属性对数据进行排序

时间:2010-08-20 15:56:28

标签: sql mysql pivot

所以,想出一个标题很难

SELECT Date(p.born_at), SUM(p.value) as 'total_value_for_day'
FROM puppies as p
WHERE p.status = 2
GROUP BY DATE(p.born_at);

因此,这给出了2列结果。

我想要的是:

列:

date | status = 1 | status = 2 | status = 3
DATA!!!

有办法吗?

3 个答案:

答案 0 :(得分:1)

SELECT Date(born_at), 
    SUM(case when Status = 1 then value else 0 end) as 'status = 1',
    SUM(case when Status = 2 then value else 0 end) as 'status = 2',
    SUM(case when Status = 3 then value else 0 end) as 'status = 3' 
FROM puppies 
GROUP BY DATE(born_at); 

答案 1 :(得分:1)

SELECT Date(p.born_at), 
SUM(case when status = 1 then p.value end) as 'status = 1',
SUM(case when status = 2 then p.value end) as 'status = 2',
SUM(case when status = 3 then p.value end) as 'status = 3'
FROM puppies as p
WHERE p.status in(1,2,3)
GROUP BY DATE(p.born_at);

答案 2 :(得分:1)

SELECT
   DATE(p.born_at)
   , SUM(CASE WHEN STATUS = 1 THEN p.value END) AS 'Status = 1'
   , SUM(CASE WHEN STATUS = 2 THEN p.value END) AS 'Status = 2'
   , SUM(CASE WHEN STATUS = 3 THEN p.value END) AS 'Status = 3'
FROM puppies AS p
WHERE p.status IN(1, 2, 3)
GROUP BY DATE(p.born_at);