我有一个包含以下2列的表: 日期和价格
我想根据同一年的同月总结价格。这就是我所拥有的:
2012-07-27 00:00:00.000 0
2012-07-27 00:00:00.000 15000
2012-08-27 00:00:00.000 0
2012-08-27 00:00:00.000 12000
2012-09-28 00:00:00.000 1000
2012-09-28 00:00:00.000 9000
2012-10-26 00:00:00.000 0
我想要以下内容:
2012-07-27 00:00:00.000 15000
2012-08-27 00:00:00.000 12000
2012-09-28 00:00:00.000 10000
2012-10-26 00:00:00.000 0
谢谢。
答案 0 :(得分:2)
您可以根据样本数据输出您想要的结果并输出:
SELECT DATE, SUM(Price)
FROM YourTable
GROUP BY DATE
ORDER BY DATE
如果您在一个月内有多个日期,并希望返回每个不同的日期,但仍会显示您可以使用的每条记录的每月总和:
SELECT DATE, SUM(SUM(Price)) OVER (PARTITION BY YEAR(Date),MONTH(Date))
FROM YourTable
GROUP BY DATE
ORDER BY DATE
答案 1 :(得分:1)
您需要使用group by语句中提供的日期函数,例如:
select sum(price)
,cast(datepart(month, date_column) as varchar) + '-' + cast(datepart(year, date_column) as varchar) as year_month
from your_table
group by datepart(year, date_column), datepart(month, date_column)
确保将datepart(year,date_column)放在第一位,这样您就不会得到每年1月份所有年份的所有价格总和,而是从2012年1月起得到所有价格的总和。
此查询的结果集与您的示例略有不同 - 您将获得:
07-2012 15000
08-2012 12000
09-2012 10000
10-2012 0
如果您想获得您提供的确切结果集,可以更改select语句的第一列:
select sum(price)
,date_column
from your_table
group by datepart(year, date_column), datepart(month, date_column)
这样做的缺点是,如果你有同一个月/每年的多天,比如说2013年12月8日和2013年8月13日,很难预测这两天你会进入哪一天最终结果集。
答案 2 :(得分:0)
我同意prekolna的回答,这可能是你真正需要的。但是,要生成您问题中的内容,您只需要按日期分组,因为月份中的日期都相同,并且因为您在日期中显示了日期:
SELECT
[Date],
SUM(Price) Price
FROM
a_table
GROUP BY
[Date];
以上假设您每月只有一个唯一的日期条目,并且您希望返回完整的日期。这些都是不好的假设。我会稍微更改prekolna的示例,以确保日期列可以正确排序并在组中匹配它:
SELECT
CAST(DATEPART(YEAR, [Date]) AS varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(MONTH, [Date]) AS varchar(2)), 2) YearMonth,
SUM(Price) Price
FROM
a_table
GROUP BY
CAST(DATEPART(YEAR, [Date]) AS varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(MONTH, [Date]) AS varchar(2)), 2);
或者,您可以执行其他操作来返回完整日期,例如MIN:
SELECT
MIN([Date]) [Date],
SUM(Price) Price
FROM
a_table
GROUP BY
CAST(DATEPART(YEAR, [Date]) AS varchar(4)),
CAST(DATEPART(MONTH, [Date]) AS varchar(2));