SQL:查询格式

时间:2013-10-29 22:17:42

标签: mysql sql pivot

我有一个包含三列的SQL查询。第一个是年份(分类),第二个是站点(分类),最后一个是温度(浮点)。行作为Year X Site的唯一组合。例如:

当前查询结果

Year, Site, Temp
1,    1,  x11
1,    2,  x12
1,    3,  x13
2,    1,  x21
2,    2,  x22
2,    3,  x23
3,    1,  x31
3,    2,  x32
3,    3,  x33

我希望将每个网站作为不同的列,同时将多年保留为行。例如:

所需的查询结果

Year, TSite1, TSite2, TSite3
 1,    x11,    x12,    x13
 2,    x21,    x22,    x23
 3,    x31,    x23,    x33

有关如何执行导致此格式的查询的任何想法?我不介意使用临时表或视图来存储信息。

提前致谢。

2 个答案:

答案 0 :(得分:1)

SELECT Year,MIN(CASE WHEN Site=1 THEN Temp ELSE 0 END) as Tsite1,
        MIN(CASE WHEN Site=2 THEN Temp  ELSE 0 END) as Tsite2,
        MIN(CASE WHEN Site=3 THEN Temp  ELSE 0 END) as Tsite3 FROM table GROUP BY Year

答案 1 :(得分:0)

数据透视查询是一种方法(如评论中所述)如果您只想要以逗号分隔的网站列表,则可以使用group_concat()执行此操作。

select year, group_concat(temp separator ', ' order by site) as temps
from t
group by year;

我意识到这可能不是你想要的 - 你通过将temp转换为字符串来丢失{{1}}的类型信息。但话说回来,如果您只是想看临时或将它们导出到另一个工具,它可能就是您所需要的。