我有两年的数据,我正在总结一下
日期| Ingredient_cost_Amount | Cost_Share_amount |
我正在考虑2012年和2013年两年的数据, 我想汇总所有总数,所以我只有两行,2012年一行,2013年一行。如何编写一个SQL语句,查看日期,但只显示4位数年份与8位数字日期日期。我怀疑通过计算总结这些列来处理它的总和,所以我真的在寻找如何将每日日期转换为4位数年份的帮助。 非常感谢帮助。
答案 0 :(得分:1)
select DATEPART(year,[Date]) [Year]
, sum(Ingredient_cost_Amount) Total
from @table
group by DATEPART(year,[Date])
答案 1 :(得分:1)
定义范围/分组表 类似于以下内容的内容应该适用于大多数RDBMS:
SELECT Grouping.id, SUM(Ingredient.ingredient_cost_amount) AS Ingredient_Cost_Amount,
SUM(Ingredient.cost_share_amount) AS Cost_Share_Amount
FROM (VALUES (2013, DATE('2013-01-01'), DATE('2014-01-01')),
(2012, DATE('2012-01-01'), DATE('2013-01-01'))) Grouping(id, gStart, gEnd)
JOIN Ingredient
ON Ingredient.date >= Grouping.gStart
AND Ingredient.date < Grouping.gEnd
GROUP BY Grouping.id
(DATE()
和相关的转换函数严重依赖于数据库。有些RDBMS不支持以这种方式使用VALUES
,尽管还有其他方法可以创建虚拟分组表。
请参阅this blog post,了解为何使用该范围的独占上限。
以这种方式使用范围表可能会允许db使用索引来帮助进行聚合。这有多大取决于一系列其他因素,例如使用的特定RDBMS。