SQL:基于一个日期创建多个选择

时间:2016-01-14 02:50:37

标签: sql sql-server

我一直在寻求帮助,但我似乎无法找到解决方案。我所拥有的是:

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

我想要做的是选择一个日期(' 1-1-2015')并显示客户名称,日期(' 1-1-2015'),该日期的SaleAmount的总和,以及SaleCost的总和。这是我遇到问题的部分,我希望下一列显示前几个月的SaleAmount和SaleCost,然后是之前的YEARS 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'

基本

1 个答案:

答案 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;