2017-01-17 72 views
0

我在添加專欄到年初至今的銷售(從2017年1月1日到最後一個週日通過)時遇到困難。我製作了兩欄,爲員工提供每週銷售情況(每週星期結束,這就是我使用date_trunc函數的原因,因此不需要每週更改日期)。我使用coalesce的原因是由於不是每週都有員工進行銷售,所以我需要在名稱旁邊顯示一個零(我從Employees表中獲得所有員工的列表)。我目前的語法存在的問題是,YTD只是模擬本週列中的結果。我如何在我的語法中添加YTD列?我將不勝感激任何幫助。顯示年迄今銷售額

select coalesce(Employees,'Total') as "Employees", "This Week", "YTD" 

from 
(select t2.Employees,coalesce(sum(t1.Sales),0) "This Week", coalesce(sum (t1.Sales),0) "YTD" 
    from Employees t2 
    left join Sales t1 ON Employees = Employees 
    and "Week" = date_trunc('week', now())::date - 1 
    group by rollup(t2.Employees)) Z 

從上面的代碼中我的結果:

Employees      This Week     YTD 
Derek Jeter      0       0 
Barry Bonds      3       3 
Luis Gonzalez      6       6  
Mike Piazza      10       10 
Jason Witten      0       0 
Lebron James      7       7 
Daryl Wade       5       5 
Eli Manning      11       11 
Total        42       42 

回答

1

UPDATE - 從評論你只有「周」的價值而不是一個確切的銷售日期,所以我對看只有原來的代碼「當年」不會奏效。更新建議的選項與此


應對目前的情況是你僅包括本週在您的基礎數據結果集;這將無法正常工作。您需要結果集來包含任何最終輸出中使用的所有數據,然後相應地過濾每個輸出。

我的理解是,您的數據僅將銷售歸因於一週 - 而不是某一特定的一天 - 因此您需要選擇哪一週應該是第一個包含的。對於2017年來說,因爲這一年在星期日開始,這可能不是問題;但總的來說,您需要決定是否統計從前一年開始但在當年結束的一週的銷售額。

排斥他們,你可以只是做

select coalesce(t2.Employees, 'Total') as "Employees" 
    , coalesce(sum(case when "Week" = date_trunc('week', now())::date - 1 
         then t1.Sales 
        end),0) "This Week" 
    , coalesce(sum(t1.Sales),0) "YTD" 
    from   Employees t2 
     left join Sales t1 
       ON Employees = Employees 
      and "Week" <= date_trunc('week', now())::date - 1 
      and "Week" >= date_trunc('year', 'now())::date 
group by rollup(t2.Employees) 

要包括他們我想你可以做到這一點

select coalesce(t2.Employees, 'Total') as "Employees" 
    , coalesce(sum(case when "Week" = date_trunc('week', now())::date - 1 
         then t1.Sales 
        end),0) "This Week" 
    , coalesce(sum(t1.Sales),0) "YTD" 
    from   Employees t2 
     left join Sales t1 
       ON Employees = Employees 
      and "Week" <= date_trunc('week', now())::date - 1 
      and "Week" >= date_trunc('week', 
             date_trunc('year', 'now())::date) 
group by rollup(t2.Employees) 
+0

感謝@馬克,我的實際日期列是周。我應該用「Week」> = 01/01/2017 <= 12/31/2017替換兩者的date_trunc函數嗎?你怎麼看?我很感謝你在這裏幫助我。 –

+1

將在這裏更新和選擇筆記 –

+0

工作像一個治療馬克,這可以爲未來的開始日期,再次感謝。 –