我有一张桌子:
id crop_id income year insert_date
----------- ----------- ----------- ----------- -----------
1 11 35000 2011 2011-12-12
2 11 45900 2012 2013-04-11
3 11 37000 2013 2015-02-12
4 11 39000 2014 2015-10-09
我想从表中选择输出值:
crop_id 2011 2012 2013
----------- ----------- ----------- -----------
11 35000 45900 37000
是否可以通过单个查询?
答案 0 :(得分:1)
这是你如何做到的。
select crop_id, sum(case when year = 2011 then income else 0 end) as year2011 from MYTABLE group by crop_id;
我没有在SQLFiddle中尝试过,因为由于某种原因它现在无法正常工作。但我认为你有主要想法。减去你应该在这个查询中硬编码几年,我现在不能弄明白,如果不使用程序语言,你怎么能避免它。
答案 1 :(得分:0)
您可以使用条件聚合来获得所需的结果:
select
crop_id,
max(case when year=2011 then income end) as "2011",
max(case when year=2012 then income end) as "2012",
max(case when year=2013 then income end) as "2013"
from your_table
group by crop_id;
如果每个作物和年份可以有多个记录,则应使用sum
函数而不是max
。