2017-07-18 41 views
0
Business Unit | Date | Sales 
North America | 5/1/17 | 5,000 
North America | 4/1/17 | 4,000 
North America | 3/1/17 | 3,000 
North America | 2/1/17 | 2,000 
North America | 1/1/17 | 1,000 
      ............ 
North America | 5/1/16 | 4,000 
North America | 4/1/16 | 3,000 
North America | 3/1/16 | 2,000 
North America | 2/1/16 | 2,000 
North America | 1/1/16 | 500 
     ............ 
Asia   | 5/1/17 | 5,000 
Asia   | 4/1/17 | 2,000 
Asia   | 3/1/17 | 1,000 
Asia   | 2/1/17 | 3,000 
Asia   | 1/1/17 | 1,500 
      ............ 
Asia   | 5/1/16 | 4,000 
Asia   | 4/1/16 | 2,000 
Asia   | 3/1/16 | 500 
Asia   | 2/1/16 | 1,500 
Asia   | 1/1/16 | 1,000 

每個月都包含所有38,30或31天 - 但爲了方便示例,我只展示了上述數據的第一天。同一行中的行的計算SQL Server Management Studio

下面是我期待實現了輸出的一個例子:

Business Unit | Date | Sales | Year over Year Change | 
North America | 5/1/17 | 5,000 |   25%   | 
North America | 4/1/17 | 4,000 |   33%   | 
North America | 3/1/17 | 3,000 |   50%   | 
North America | 2/1/17 | 2,000 |   0%   | 
North America | 1/1/17 | 1,000 |   50%   | 
      ............ 
North America | 5/1/16 | 4,000 |   xx%   | 
North America | 4/1/16 | 3,000 |   xx%   | 
North America | 3/1/16 | 2,000 |   xx%   | 
North America | 2/1/16 | 2,000 |   xx%   | 
North America | 1/1/16 | 500 |   xx%   | 
     ............ 
Asia   | 5/1/17 | 5,000 |   25%   | 
Asia   | 4/1/17 | 2,000 |   0%   | 
Asia   | 3/1/17 | 1,000 |   100%   | 
Asia   | 2/1/17 | 3,000 |   100%   | 
Asia   | 1/1/17 | 1,500 |   50%   | 
      ............ 
Asia   | 5/1/16 | 4,000 |   xx%   | 
Asia   | 4/1/16 | 2,000 |   xx%   | 
Asia   | 3/1/16 | 500 |   xx%   | 
Asia   | 2/1/16 | 1,500 |   xx%   | 
Asia   | 1/1/16 | 1,000 |   xx%   | 

正如上面提到的,這個數據是每日追溯到多年。非常感謝所有幫助!

回答

1

可以如下查詢:

Select coalesce(lastyear.[Business Unit], currentyear.[Business Unit]) as BusinessUnit, currentyear.[date], lastyear.[date] as [LastYear Date], 
    Format((1-(lastyear.Sales*1.0)/currentyear.Sales), 'p') 
from #yoydata lastyear 
left join #yoydata currentyear 
on lastyear.[date] = dateadd(yy,-1,currentyear.[date]) 
and lastyear.[Business Unit] = currentyear.[Business Unit] 
+0

感謝一噸就是超近。看起來實際的計算列是關閉的。當我將其插入到實際數據中時,它會提取正確的日期,但它不會計算根據去年日期更改的年份 – ls101

+0

這有意義嗎? – ls101

+0

你得到什麼問題? –

1
SELECT 
    COALESCE(lastyear.[bu], currentyear.[bu]) AS BusinessUnit 
    , currentyear.[dt] 
    , lastyear.[dt]        AS [LastYear Date] 
    , Format((1-(lastyear.Sales*1.0)/currentyear.Sales), 'p') 
FROM 
    #yoydata lastyear 
     LEFT JOIN #yoydata currentyear ON lastyear.[dt] = dateadd(yy,-1,currentyear.[dt]) 
              AND lastyear.bu = currentyear.bu 
+0

上一個答案剛剛缺少業務部門的加入。 – lookslikeanevo

相關問題