如何在sql server中汇总同月和月的两个值

时间:2016-06-07 11:37:53

标签: sql sql-server sql-server-2008

state    month          ID      sales
-------------------------------------
FL       05/18/2015     0001   12,000
FL       05/19/2015     0001    6,000
FL       05/20/2015     0001    3,000
FL       05/21/2015     0001    6,000
FL       06/01/2016     0001    4,000  
TX       06/02/2016     0050    1,000

在具有相同月份但具有不同日期的上表月份列中。我的问题是如何在不同日期的同月添加/总和销售列?

6 个答案:

答案 0 :(得分:2)

试试这种方式

select datepart(year,month) as year ,datepart(month,month) as month,  sum(sales)
from tablename
group by datepart(year,month) ,datepart(month,month) 

答案 1 :(得分:0)

在月份列上使用简单聚合。您可以使用delete函数提取给定日期的月份。

DATENAME

答案 2 :(得分:0)

首先看一下this question如何将月份列(假设它是一个字符串/ varchar)转换为日期。 接下来,按日期的月份和年份部分对销售列进行分组。

答案 3 :(得分:0)

你是说你想要1月份的总数而且12月份不论年份?

如果是,那么你可以通过DATEPART做一个简单的agrregate和分组(月,日期)

EG

SELECT STATE, DATEPART(month, [month]), SUM(sales)
FROM yourTable
GROUP BY 
  STATE, DATEPART(month, [month])

答案 4 :(得分:0)

通过使用以下查询,您可以按月,年度获得结果:

SELECT MONTH([Month]) [Month], YEAR([Month]) [Year], SUM(Sales) TotalSales
FROM TestTable
GROUP BY MONTH([Month]), YEAR([Month])
ORDER BY MONTH([Month]), YEAR([Month])

使用给定的样本数据实际执行:

DECLARE @TestTable TABLE ([State] VARCHAR (20), [Month] DATE, ID VARCHAR(5), Sales INT);

INSERT INTO @TestTable ([State], [Month], ID, Sales)
VALUES 
('FL', '05/18/2015', '0001', 12000),
('FL', '05/19/2015', '0001',  6000),
('FL', '05/20/2015', '0001',  3000),
('FL', '05/21/2015', '0001',  6000),
('FL', '06/01/2016', '0001',  4000),  
('TX', '06/02/2016', '0050',  1000),
('TX', '05/02/2016', '0050',  1000)

SELECT MONTH([Month]) [Month], YEAR([Month]) [Year], SUM(Sales) TotalSales
FROM @TestTable
GROUP BY MONTH([Month]), YEAR([Month])
ORDER BY MONTH([Month]), YEAR([Month])

<强>结果:

Month   Year    TotalSales
5      2015     27000
5      2016      1000
6      2016      5000

答案 5 :(得分:0)

以下查询可能会对您有所帮助: -

declare @test111 table
(name varchar(20) NOT NULL,
month date NOT NULL,
col1 int NOT NULL,
sales int NOT NULL)

Insert into @test111
values('FL','05/18/2015',0001,12000),
('FL','05/19/2015',0001,6000),
('FL','05/20/2015',0001,3000),
('FL','05/21/2015',0001,6000),
('FL','06/01/2016',0001,4000),
('TX','06/02/2016',0050,1000)


select month,sum(sales) over (partition by datepart(mm,month)) Sales
from @test111

输出

month       Sales
2015-05-18  27000
2015-05-19  27000
2015-05-20  27000
2015-05-21  27000
2016-06-01  5000
2016-06-02  5000