0

たとえば、2 年分のデータを集計しています。

日付 | 材料費の金額| Cost_Share_amount |

2012 年と 2013 年の 2 年分のデータを見ています。すべての合計をロールアップしたいので、2012 年に 1 行、2013 年に 1 行の 2 行しかありません。日付は表示されますが、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 に答える