質問編集履歴

3

2015/10/22 03:47

投稿

mimipachi0133
mimipachi0133

スコア9

test CHANGED
File without changes
test CHANGED
File without changes

2

2015/10/22 03:47

投稿

mimipachi0133
mimipachi0133

スコア9

test CHANGED
File without changes
test CHANGED
File without changes

1

2015/10/22 03:47

投稿

mimipachi0133
mimipachi0133

スコア9

test CHANGED
File without changes
test CHANGED
@@ -87,305 +87,3 @@
87
87
  しかしこのSQLを動かしたところ、3時間以上かかっても、1日分のデータも出しきれていませんでした。
88
88
 
89
89
  方法は良さそうなのですが、実用に足るスピードアップの方法を考えているところです。
90
-
91
-
92
-
93
- 以下に使用SQLを書きます(ややうろ覚えなので疑問点あればお願いいたします)。
94
-
95
-
96
-
97
- --このSQLで動かした結果、3時間経過しても全データ抽出ができませんでした。
98
-
99
- --今後の利用も考えて長くても20~30分くらいで取得できるようにしたいです。
100
-
101
-
102
-
103
-
104
-
105
- DECLARE
106
-
107
- @MASTER_YM AS NUMERIC
108
-
109
-
110
-
111
- /** M_物流製品親子マスタ(工場系)は過去マスタデータを蓄積するので、最新月しか持たないM_サイズ処理定義マスタ(地区系)と齟齬が起きないように使用年月を固定しています **/
112
-
113
- SET @MASTER_YM=(SELECT MAX([年月]) FROM [BI_T].[dbo].[M_サイズ処理定義マスタ]);
114
-
115
-
116
-
117
- WITH
118
-
119
-
120
-
121
- /*********************************************************
122
-
123
- 日付範囲
124
-
125
- **********************************************************/
126
-
127
- [WK_日付範囲] AS (
128
-
129
- SELECT TOP 7 CONVERT(DATE, CONVERT(CHAR(8), MAX([年月日])), 112) AS [対象年月日]
130
-
131
- FROM
132
-
133
- (SELECT TOP 7 年月日 FROM [BI_T].[dbo].[T_受注残] GROUP BY 年月日 ORDER BY 年月日 DESC
134
-
135
- UNION
136
-
137
- SELECT TOP 7 年月日 FROM [BI_T].[dbo].[T_地区在庫] GROUP BY 年月日 ORDER BY 年月日 DESC
138
-
139
- )W
140
-
141
- GROUP BY [年月日]
142
-
143
- ORDER BY [年月日] DESC
144
-
145
- ),
146
-
147
-
148
-
149
- /*********************************************************
150
-
151
- 年月日計算
152
-
153
- **********************************************************/
154
-
155
- [WK_表示年月日計算] AS (
156
-
157
- SELECT [基準日], DATEADD(d, -1, [基準日]) AS [集計対象最終日]
158
-
159
- FROM
160
-
161
- (
162
-
163
- SELECT [対象年月日] AS [基準日] FROM [WK_日付範囲]
164
-
165
- )Y
166
-
167
- ),
168
-
169
- [WK_取得開始日割当] AS (
170
-
171
- SELECT [基準日],[集計対象最終日],
172
-
173
- DATEFROMPARTS(YEAR([集計対象最終日]), MONTH([集計対象最終日]), 1) AS [集計対象初日]
174
-
175
- FROM [WK_表示年月日計算]
176
-
177
- ),
178
-
179
-
180
-
181
- /*********************************************************
182
-
183
- マスタテーブル --WHERE条件等は、区分の決まりごとなのできにしないでください
184
-
185
- **********************************************************/
186
-
187
- [TMP_マスタテーブル] AS (
188
-
189
- SELECT CONVERT(DATE, CONVERT(CHAR(8), MAX([年月日])), 112) AS [日付]
190
-
191
- , [倉庫コード]
192
-
193
- , [製品コード親]
194
-
195
- , [本数]
196
-
197
- FROM
198
-
199
- (SELECT
200
-
201
- T0.[年月日]
202
-
203
- , T0.[出荷先コード] AS [倉庫コード]
204
-
205
- , CASE
206
-
207
- WHEN M0.[製品コード親] IS NULL THEN T0.[製品コード]
208
-
209
- ELSE M0.[製品コード親]
210
-
211
- END AS [製品コード親]
212
-
213
- , T0.[出荷本数] AS [本数]
214
-
215
- FROM
216
-
217
- [BI_T].[dbo].[T_工場出荷] T0
218
-
219
- LEFT OUTER JOIN
220
-
221
- [BI_T].[dbo].[M_物流製品親子マスタ] M0
222
-
223
- ON
224
-
225
- T0.[製品コード] = M0.[製品コード]
226
-
227
- AND @MASTER_YM = M0.[年月]
228
-
229
- WHERE
230
-
231
- T0.[品種] = 'AT'
232
-
233
- AND T0.[内訳] NOT IN ('6','9')
234
-
235
- AND T0.[需要先]='1'
236
-
237
- AND SUBSTRING(ISNULL(M0.[製品コード親], T0.[製品コード]), 4, 1) != 'T'
238
-
239
- AND LEN(T0.[出荷先コード]) > 7 --直送は不要
240
-
241
-
242
-
243
- UNION ALL
244
-
245
-
246
-
247
- SELECT
248
-
249
- T0.[年月日]
250
-
251
- , T0.[出荷先コード] AS [倉庫コード]
252
-
253
- , CASE
254
-
255
- WHEN M0.[製品コード親] IS NULL THEN T0.[DOT製品コード親]
256
-
257
- ELSE M0.[製品コード親]
258
-
259
- END AS [製品コード親]
260
-
261
- , T0.[出荷本数] AS [本数]
262
-
263
- FROM
264
-
265
- [BI_T].[dbo].[T_地区出荷] T0
266
-
267
- LEFT OUTER JOIN
268
-
269
- [BI_T].[dbo].[M_サイズ処理定義マスタ] M0
270
-
271
- ON
272
-
273
- T0.[DOT製品コード親] = M0.[DOT製品コード親]
274
-
275
- WHERE
276
-
277
- T0.[品種] = 'AT'
278
-
279
- AND T0.[内訳] NOT IN ('6','9')
280
-
281
- AND SUBSTRING(ISNULL(M0.[製品コード親], T0.[DOT製品コード親]), 4, 1) != 'T'
282
-
283
- AND T0.[受払区分] IN ('C3','G3')
284
-
285
-
286
-
287
- UNION ALL
288
-
289
-
290
-
291
- SELECT
292
-
293
- T0.[年月日]
294
-
295
- , T0.[出荷先コード] AS [倉庫コード]
296
-
297
- , CASE
298
-
299
- WHEN M0.[製品コード親] IS NULL THEN T0.[DOT製品コード親]
300
-
301
- ELSE M0.[製品コード親]
302
-
303
- END AS [製品コード親]
304
-
305
- , (T0.[入荷本数]*-1) AS [本数]
306
-
307
- FROM
308
-
309
- [BI_T].[dbo].[T_地区入荷] T0
310
-
311
- LEFT OUTER JOIN
312
-
313
- [BI_T].[dbo].[M_サイズ処理定義マスタ] M0
314
-
315
- ON
316
-
317
- T0.[DOT製品コード親] = M0.[DOT製品コード親]
318
-
319
- WHERE
320
-
321
- T0.[品種] = 'AT'
322
-
323
- AND T0.[内訳] NOT IN ('6','9')
324
-
325
- AND SUBSTRING(ISNULL(M0.[製品コード親], T0.[DOT製品コード親]), 4, 1) != 'T'
326
-
327
- AND T0.[受払区分] = 'C5'
328
-
329
- AND LEN(T0.[出荷元コード]) > 7
330
-
331
- )Z
332
-
333
- GROUP BY
334
-
335
- [倉庫コード]
336
-
337
- , [製品コード親]
338
-
339
- , [本数]
340
-
341
- ),
342
-
343
- [TMP_コードグルーピング] AS (
344
-
345
- SELECT DISTINCT [倉庫コード],[製品コード親] FROM [TMP_マスタテーブル]
346
-
347
- )
348
-
349
-
350
-
351
- SELECT
352
-
353
- CAST((CONVERT(VARCHAR,[基準日],112))AS NUMERIC) AS [年月日]
354
-
355
- , [倉庫コード]
356
-
357
- , [製品コード親]
358
-
359
- , (SELECT SUM([本数])
360
-
361
- FROM
362
-
363
- [TMP_マスタテーブル] M01
364
-
365
- WHERE
366
-
367
- M01.[倉庫コード]=TM.[倉庫コード] AND M01.[製品コード親]=TM.[製品コード親]
368
-
369
- AND
370
-
371
- M01.[日付] BETWEEN WK.[集計対象初日] AND WK.[集計対象最終日]) AS [本数]
372
-
373
- FROM
374
-
375
- [WK_取得開始日割当] WK, [TMP_コードグルーピング] TM
376
-
377
- WHERE
378
-
379
- (SELECT SUM([本数])
380
-
381
- FROM
382
-
383
- [TMP_マスタテーブル] M01
384
-
385
- WHERE
386
-
387
- M01.[倉庫コード]=TM.[倉庫コード] AND M01.[製品コード親]=TM.[製品コード親]
388
-
389
- AND
390
-
391
- M01.[日付] BETWEEN WK.[集計対象初日] AND WK.[集計対象最終日]) IS NOT NULL