2017-06-03 246 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