2016-01-14 69 views
0

我一直在尋找這方面的幫助,但我似乎無法找到解決方案。我擁有的是:SQL:創建多個選擇基於一個日期

表名爲Details_Orders。 列:CustomerName,InvoiceDate,SaleAmount和SaleCost。

我想要做的是選擇日期('1-1-2015')並顯示客戶名稱,日期('1-1-2015'),該日期的SaleAmount和SaleCost的總和。這裏是我遇到問題的部分,我希望下一列顯示前幾個月的SaleAmount和SaleCost,以及之前的SaleAmount和SaleCost。

我很難搞清楚如何編寫以前的時間段選擇語句。任何幫助,將不勝感激。

Select 
     CustomerName, 
     InvoiceDate, 
     Sum(SaleAmount), 
     Sum(SaleCost), 
     *PREVIOUS MONTH Sum(SalesAmount) DATEADD(MONTH,-1,'1-1'2015'), 
     PREVIOUS MONTH Sum(SalesCost) DATEADD(MONTH,-1,'1-1'2015'), 
     PREVIOUS YEAR Sum(SalesAmount) DATEADD(YEAR,-1,'1-1'2015'), 
     PREVIOUS YEAR Sum(SalesCost) DATEADD(YEAR,-1,'1-1'2015')* 
    From Details_Orders 
    WHERE InvoiceDate='1-1-2015' 

基本

+0

是您'InvoiceDate'一個'DATE'或'DATETIME'列? –

+0

這是一個日期。謝謝! –

回答

0

你想使用條件聚集,還需要一個group by。上個月和下一年的確切定義有些不清楚。這裏有一個解釋:

Select CustomerName, 
      Sum(case when InvoiceDate = thedate then SaleAmount else 0 end), 
      Sum(case when InvoiceDate = thedate then SaleCost else 0 end), 
      Sum(case when year(InvoiceDate)*12 + month(InvoiceDate) = 
         year(thedate)*12 + month(thedate) - 1 
        then SaleAmount else 0 
       end), 
      Sum(case when year(InvoiceDate)*12 + month(InvoiceDate) = 
         year(thedate)*12 + month(thedate) - 1 
        then SaleCost else 0 
       end), 
      Sum(case when InvoiceDate < thedate and 
         InvoiceDate >= dateadd(year, -1, thedate 
        then SaleAmount else 0 
       end), 
      Sum(case when InvoiceDate < thedate and 
         InvoiceDate >= dateadd(year, -1, thedate 
        then SaleCost else 0 
       end) 
    From (select cast('2015-01-01' as date) as thedate 
     ) params cross join 
     Details_Orders o 
    group by CustomerName; 
+0

謝謝戈登。花了一些時間處理這段代碼,它讓我得到了我需要去的地方。感謝你的時間! –