0

例如,我有两年的数据要总结

日期 | 成分_成本_数量| Cost_Share_amount |

我正在查看 2012 年和 2013 年的两年数据,我想汇总所有总数,所以我只有两行,2012 年的一行和 2013 年的一行。我如何编写看起来像的 SQL 语句在日期,但仅显示 4 位数年份与 8 位数每日日期。我怀疑它的总和部分将通过将这些列与计算相加来处理,所以我真的在寻求如何将每日日期转换为 4 位数年份的帮助。非常感谢您的帮助。

4

2 回答 2

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()并且相关的转换函数在很大程度上依赖于 DB。一些 RDBMS 不支持使用VALUES这种方式,尽管还有其他方法可以创建虚拟分组表)
请参阅这篇博文了解为什么我对范围使用了独占上限。

以这种方式使用范围表可能会允许数据库使用索引来帮助聚合。这有多大帮助取决于许多其他因素,例如使用的特定 RDBMS。

于 2014-12-31T01:42:44.833 回答
1
select DATEPART(year,[Date]) [Year]
, sum(Ingredient_cost_Amount) Total
from @table
group by DATEPART(year,[Date])
于 2014-12-30T22:48:47.470 回答