Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 关于当前销售和以前销售的T-SQL_Sql Server_Tsql - Fatal编程技术网

Sql server 关于当前销售和以前销售的T-SQL

Sql server 关于当前销售和以前销售的T-SQL,sql-server,tsql,Sql Server,Tsql,如果我有下表: CREATE TABLE [dbo].[Sales]( [SaleDate] [datetime] NULL, [SaleAmt] [money] NULL ) ON [PRIMARY] 我如何检索每月的销售总额,同时显示上个月的数字 我原以为下面的方法行得通,但行不通 select DATEPART(m,s1.saledate), SUM(s1.SaleAmt), SUM(s2.SaleAmt) from sales s1 inner join

如果我有下表:

CREATE TABLE [dbo].[Sales](
[SaleDate] [datetime] NULL,
[SaleAmt] [money] NULL
) ON [PRIMARY]
我如何检索每月的销售总额,同时显示上个月的数字

我原以为下面的方法行得通,但行不通

select 
    DATEPART(m,s1.saledate), SUM(s1.SaleAmt), SUM(s2.SaleAmt) 
from 
    sales s1 
inner join 
    Sales s2 on DATEPART(m, DateAdd(m, -1, s2.saledate)) = DATEPART(m, s1.saledate)
group by 
    DATEPART(m, s1.saledate)

我想我已经想出了一个非常简单的解决方案,尽管我认为它不如使用自连接方法好

select DATEPART(m,s1.saledate) as Month,
SUM(s1.SaleAmt) as CurrentSales,
(select SUM(SaleAmt) 
from Sales where DATEPART(m,saledate)=DATEPART(m,s1.saledate)-1) as PreviousSales from             
sales s1
group by DATEPART(m,s1.saledate)

根据您想要的输出,以下解决方案之一应该适合您。我可能更倾向于第二种解决方案,但这完全取决于您希望看到什么:

select
  s2.month as 'C-MONTH',
  s1.month as 'P-MONTH',
  s2.amt as 'C-AMT',
  s1.amt as 'P-AMT'
from
(
  select 
    datepart(m, saledate) as month,
    sum(SaleAmt) as amt
  from 
    Sales
  group by
    datepart(m, saledate)
) s1,
(
  select 
    datepart(m, saledate) as month,
    sum(SaleAmt) as amt
  from 
    Sales
  group by
    datepart(m, saledate)
) s2
where
  s2.month = s1.month + 1
演示:


演示:

你所说的“显示上个月的数据”是什么意思。你能提供一个你想要的输出样本吗?
select
  s2.month as 'C-MONTH',
  s1.month as 'P-MONTH',
  s2.amt as 'C-AMT',
  s1.amt as 'P-AMT'
from
(
  select 
    datepart(m, saledate) as month,
    sum(SaleAmt) as amt
  from 
    Sales
  group by
    datepart(m, saledate)
) s1
right outer join
(
  select 
    datepart(m, saledate) as month,
    sum(SaleAmt) as amt
  from 
    Sales
  group by
    datepart(m, saledate)
) s2
on
  s2.month = s1.month + 1