例如,我有两年的数据要总结
日期 | 成分_成本_数量| Cost_Share_amount |
我正在查看 2012 年和 2013 年的两年数据,我想汇总所有总数,所以我只有两行,2012 年的一行和 2013 年的一行。我如何编写看起来像的 SQL 语句在日期,但仅显示 4 位数年份与 8 位数每日日期。我怀疑它的总和部分将通过将这些列与计算相加来处理,所以我真的在寻求如何将每日日期转换为 4 位数年份的帮助。非常感谢您的帮助。
例如,我有两年的数据要总结
日期 | 成分_成本_数量| Cost_Share_amount |
我正在查看 2012 年和 2013 年的两年数据,我想汇总所有总数,所以我只有两行,2012 年的一行和 2013 年的一行。我如何编写看起来像的 SQL 语句在日期,但仅显示 4 位数年份与 8 位数每日日期。我怀疑它的总和部分将通过将这些列与计算相加来处理,所以我真的在寻求如何将每日日期转换为 4 位数年份的帮助。非常感谢您的帮助。
定义范围/分组表。
在大多数 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()
并且相关的转换函数在很大程度上依赖于 DB。一些 RDBMS 不支持使用VALUES
这种方式,尽管还有其他方法可以创建虚拟分组表)
请参阅这篇博文了解为什么我对范围使用了独占上限。
以这种方式使用范围表可能会允许数据库使用索引来帮助聚合。这有多大帮助取决于许多其他因素,例如使用的特定 RDBMS。
select DATEPART(year,[Date]) [Year]
, sum(Ingredient_cost_Amount) Total
from @table
group by DATEPART(year,[Date])