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