2017-01-12 58 views
0

我想在底部添加一個總計,似乎並不理解如何獲取語法以向我顯示底部的「總計」。我用盡了在線搜索的時間。我需要合併片段,因爲我需要爲沒有銷售的員工顯示零。我看了一下這個鏈接,但我需要合併中的在子查詢中添加總計

Add a row for TOTAL in a sql query result

select t2.Employee, coalesce(t1."This Week",0) "This Week" 
from mytable t2 left outer join 
(select case when grouping(Employee) = 1 then 'Total' else Employee end, sum(Sales) "This Week" 
from information 
where Week >= DATE '01/01/2017' and Week < DATE '01/31/2017' 
and LastUpdate >= DATE '01/01/2017' and LastUpdate < DATE '01/31/2017' 
group by Employee with Rollup) t1 
on t1.Employee = t2.Employee 

結果:

Employee     This Week 

Batman      15 
Penguin      25 
Joker      0 
Bane       5 
Scarecrow     0 
------------------->   45 

錯誤:

ERROR: syntax error at or near "with" 
LINE 8: group by Employee with Rollup) t1 
+0

更改你的'集團by'聲明'集團通過員工提供Rollup'看如果可行 –

+0

您正在尋找['ROLLUP'](https://www.postgresql.org/docs/devel/static/queries-table-expressions.html)。 –

+0

在With顯示錯誤... –

回答

1

你可以試試這個ROLLUP

SELECT coalesce(Employee,'Total'), 
     "This Week" 
FROM 
    (SELECT t2.Employee, 
      coalesce(sum(t1.Sales),0) "This Week" 
    FROM mytable t2 
    LEFT JOIN information t1 ON t1.Employee = t2.Employee 
    AND t1.Week >= DATE '01/01/2017' 
    AND t1.Week < DATE '01/31/2017' 
    AND t1.LastUpdate >= DATE '01/01/2017' 
    AND t1.LastUpdate < DATE '01/31/2017' 
    GROUP BY rollup(t2.Employee) 
) x 
+0

感謝vkp的幫助。 –

+0

是的,我編輯它。 –

1

您不需要外部查詢。除周和LastUpdate上的條件外,不涉及連接操作;你可以將它們移到WHERE子句(這PostgreSQL的優化應該做的本身是這樣,但是這樣你的查詢更加清晰):

SELECT 
    COALESCE(t2.Employee, 'Total') AS Employee, 
    COALESCE(SUM(t1.Sales), 0) AS "This Week" 
FROM mytable t2 
LEFT JOIN information t1 USING (Employee) 
WHERE t1.Week BETWEEN DATE '01/01/2017' AND DATE '01/31/2017' 
    AND t1.LastUpdate BETWEEN DATE '01/01/2017' AND DATE '01/31/2017' 
GROUP BY GROUPING SETS ((t2.Employee),()); 
+0

謝謝@ Fabian,它在拋出使用(員工)錯誤時說錯誤:USING子句中指定的列「Employee」在右表中不存在。 –

+0

咦?您的信息表中沒有員工專欄?那麼接受的答案如何爲你工作? :/ –