1

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

当前查询结果

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

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

提前致谢。

4

2 回答 2

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
于 2013-10-29T22:33:46.050 回答
0

透视查询是一种方法(如评论中所述)如果您只想要一个以逗号分隔的站点列表,那么您可以使用group_concat().

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

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

于 2013-10-29T22:34:47.287 回答