我正在編寫一份報告,顯示自過去一年以來每個月的代碼總量。將列名稱顯示爲從current_date開始的過去一年的月份
目前,如果我只是做一個計數所有代碼在過去的一年裏,然後我的結果集類似這樣
name | code | total | date
build1 x1 10 04-2013
build1 x50 60 05-2013
build1 x1 80 06-2013
build1 x90 450 07-2013
我能轉的所有行,以便所有的列會本月,總數低於它。我更新的結果是這樣的,現在
name | code | apl | may | jun | jul
build1 x1 10 0 80 0
build1 x50 0 60 0 0
build1 x90 0 0 0 450
上面的代碼是我期待的,但什麼,我想現在要做的,就是爲了通過當月的一切,然後再一年,自認爲當月的結果。
因此,如果當前的月份是七月那麼我的結果集將被責令這樣
name | code | jul | jun | may | apl
build1 x1 0 80 0 10
build1 x50 0 0 60 0
build1 x90 450 0 0 0
我到我使用別名的作爲月份名稱運行中的問題。而且你不能從別名中獲取月份。另外,據我所知,別名是靜態的,所以一旦你設置了別名,他們就不能改變。將月份作爲列名稱的唯一方法是從數據集中提取它。但是,當我將行轉置到列中時,我必須使用別名,因爲我正在使用case語句來獲取每個月的所有總計。
編輯:對不起,PostgreSQL的版本是8.4,這是我的查詢,我至今
SELECT
pname,
code,
SUM(totaljanurary) AS "Janurary",
SUM(totalfebruary) AS "February",
SUM(totalmarch) AS "March",
SUM(totalapril) AS "April",
SUM(totalmay) AS "May",
SUM(totaljune) AS "June",
SUM(totaljuly) AS "July",
SUM(totalaugust) AS "August",
SUM(totalseptember) AS "September",
SUM(totaloctober) AS "October",
SUM(totalnovember) AS "November",
SUM(totaldecember) AS "December"
FROM(
SELECT
pname,
code,
SUM(case when extract (month FROM checked_date)=01 then total else 0 end) AS totaljanurary,
SUM(case when extract (month FROM checked_date)=02 then total else 0 end) AS totalfebruary,
SUM(case when extract (month FROM checked_date)=03 then total else 0 end) AS totalmarch,
SUM(case when extract (month FROM checked_date)=04 then total else 0 end) AS totalapril,
SUM(case when extract (month FROM checked_date)=05 then total else 0 end) AS totalmay,
SUM(case when extract (month FROM checked_date)=06 then total else 0 end) AS totaljune,
SUM(case when extract (month FROM checked_date)=07 then total else 0 end) AS totaljuly,
SUM(case when extract (month FROM checked_date)=08 then total else 0 end) AS totalaugust,
SUM(case when extract (month FROM checked_date)=09 then total else 0 end) AS totalseptember,
SUM(case when extract (month FROM checked_date)=10 then total else 0 end) AS totaloctober,
SUM(case when extract (month FROM checked_date)=11 then total else 0 end) AS totalnovember,
SUM(case when extract (month FROM checked_date)=12 then total else 0 end) AS totaldecember
FROM (
--START HERE
SELECT
pname,
code,
COUNT(code)AS total,
date_trunc('month',checked_date)::date AS checked_date
FROM table1
AND checked_date >= current_date-365
AND checked_date <= current_date
GROUP BY pname, code, date_trunc('month',checked_date)
)T1
GROUP BY pname, code, date_trunc('month',checked_date)
)T2
GROUP BY pname, code
ORDER BY pname, code
您忘了提供Postgres版本,您的表格定義,您當前的查詢(是否工作)以及一些示例數據。 –