我一直在寻求帮助,但我似乎无法找到解决方案。我所拥有的是:
表名为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'
基本
答案 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;