Microsoft Access 掲示板

クエリが複雑すぎます / 5

16 コメント
views
4 フォロー
5
hiroton 2020/04/01 (水) 16:17:15 修正 fb5a6@f966d

元データをうまいことくっつけてから集計は最後にやるのがいいんじゃないかなぁと

SELECT 商品ID, Max(q.商品名) AS 商品名, Sum(IIf(月=-1,仕入数量)) AS 期首数量, Sum(IIf(月=-1,仕入金額)) AS 期首金額,
 Sum(IIf([月]=0,[仕入数量])) AS 7月仕入数量, Sum(IIf([月]=0,[仕入金額])) AS 7月仕入金額, Sum(IIf([月]=0,[売上数量])) AS 7月売上数量, ([期首金額]+[7月仕入金額])/([期首数量]+[7月仕入数量])*[7月売上数量] AS 7月払出金額, Sum(IIf([月]<=0,[仕入数量]-[売上数量])) AS 7月数量, [期首金額]+Sum(IIf([月]=0,[仕入金額]))-[7月払出金額] AS 7月金額,

~中略~

FROM 
( SELECT 商品ID, 商品名, -1 AS 月, 期首数量 AS 仕入数量, 期首金額 AS 仕入金額, 0 AS 売上数量, 0 AS 売上金額
  FROM t商品マスタ, t決算日
  union all
  SELECT 仕入商品ID, "", Month([仕入日])-7 Mod 12, 仕入数量, 仕入単価*仕入数量, 0, 0
  FROM t仕入明細, t決算日
  WHERE 仕入日 Between DateAdd("yyyy",-1,[決算日]+1) And [決算日]
  union all
  SELECT 売上商品ID, "", Month([売上日])-7 Mod 12, 0, 0, 売上数量, 売上単価*売上数量
  FROM t売上明細, t決算日
  WHERE 売上日 Between DateAdd("yyyy",-1,[決算日]+1) And [決算日]
)  AS q
GROUP BY 商品ID;

ついでに「日付」のままだとごちゃごちゃしてしまうところを、扱いやすいように「月(のようなもの)」に変換しています
期首をマイナス1月の仕入れとみなし、7月から翌6月は0月~11月として計算式が単純になるようにしています

※「月次移動平均」に関係する計算式そのものの是非は見ていません

通報 ...