2017-06-03 208 views
0

有一点复杂的查询,我正在努力解决。我真的不知道如何查询就可以了谷歌得到一些帮助......Postgres复杂的SQL查询

我有一个表是这样的:

Date  | period | meter | value 
2017-01-01 | 1 | meter01 | 1.12 
2017-01-01 | 2 | meter01 | 2.12 
. 
. 
2017-01-01 | 1 | meter02 | 0.12 
2017-01-01 | 2 | meter02 | 7.12 
. 
. 
2017-01-02 | 1 | meter01 | 2.12 
2017-01-02 | 2 | meter01 | 4.12 
. 
. 

有任何给定的日期48期。任何一个日期也可能有几百米。

我希望返回的结果看起来是这样的:

Date  | Meter | Period 1 | Period 2 | Period 3 | Period 4 
2017-01-01 | meter01 | 1.24 | 2.12  
2017-01-01 | meter02 | 2.24 | 3.12 

结果会给我的每个表,日期和时段,总计其中周期列对于给定的所有读数的总和仪表,周期和日期。

回答

1

一种方法是有条件聚集:

select date, meter, 
     sum(case when period = 1 then value end) as period_01, 
     sum(case when period = 2 then value end) as period_02, 
     sum(case when period = 3 then value end) as period_03, 
     sum(case when period = 4 then value end) as period_04 
from t 
group by date, meter 
order by date, meter; 
+0

非常感谢!顺便说一句...你知道我怎么会把结果舍入到2dp吗?这些列是数字(20,8) – Daryn

+0

没关系,我想出了它.. round(value,dp) – Daryn

+0

您好Gordon,您是否也知道我可以如何将每行的所有周期列的总和作为最后一列?例如日期| Meter |期间1 |期间2 |期间3 |期间4 |总计 – Daryn