|
▼Seri さん:
# 小僧さんの回答で解決となるかもしれませんが、せっかく作ったので...
自作関数で、日付をグループ化するコードを考えてみました。
まず、標準モジュールに、次のコードをコピペして下さい。
'--------------------------------------------------------------------------
Function fxGroupDate(ByVal myHIDUKE As Long, _
ByVal myHINBAN As String) As Long
Dim myDCnt As Long '前作業日の製造有無
Dim myDmaxDay As Long '前作業日
myDmaxDay = Nz(DMax("日付", "aaT_集計前", "日付<" & myHIDUKE), 0)
myDCnt = DCount("*", "aaT_集計前", "日付=" & myDmaxDay & _
" and 品番='" & myHINBAN & "'")
Do Until myDCnt = 0 '連続生産時は遡る
myHIDUKE = myDmaxDay
myDmaxDay = Nz(DMax("日付", "aaT_集計前", "日付<" & myHIDUKE), 0)
myDCnt = DCount("*", "aaT_集計前", "日付=" & myDmaxDay & _
" and 品番='" & myHINBAN & "'")
Loop
fxGroupDate = myHIDUKE
End Function
'--------------------------------------------------------------------------
'日付は長整数型、品番はテキスト型、と想定してます。
次に以下のクエリーを作ります。
SELECT テーブル.鋳造機,
fxGroupDate([テーブル]![日付],[テーブル]![品番]) AS 日付,
テーブル.コード,
テーブル.品番,
テーブル.品名,
Sum(テーブル.目標数) AS 目標数の合計,
Sum(テーブル.実績数) AS 実績数の合計
FROM テーブル
GROUP BY テーブル.鋳造機,
fxGroupDate([テーブル]![日付],[テーブル]![品番]),
テーブル.コード,
テーブル.品番,
テーブル.品名
ORDER BY fxGroupDate([テーブル]![日付],[テーブル]![品番]),
テーブル.品番;
テーブル名を「テーブル」としています。適宜変更してください。
また、日付はデータから判断してますので、例えば、
鋳造機 日付 コード 品番 品名 目標数 実績数
10 20050601 0907 5678 AAAAA 400 320
10 20050615 0907 5678 AAAAA 500 580
このようなデータからは、
鋳造機 日付 コード 品番 品名 目標数 実績数
10 20050601 0907 5678 AAAAA 900 900
このように集計されます。
(連続した日付ではなく、製造日から判断してます)
さらに、小僧さんがご指摘されてる
> ・20050601 に 鋳造機「9」と「10」で同じ製品が作られることはないのか。
> ・コード・品番・品名は一意なのか。
> (コードが決定したら品番と品名は決定されるのか。)
> ・鋳造機ごとに作られる製品は決まっているのか。
>
> 等…がはっきりとしておりません。
これらについても考慮しておりませんので、結果についてはよく確認して下さい。
参考になれば幸いです。
|
|