質問するログイン新規登録

質問編集履歴

3

2015/10/22 03:47

投稿

mimipachi0133
mimipachi0133

スコア9

title CHANGED
File without changes
body CHANGED
File without changes

2

2015/10/22 03:47

投稿

mimipachi0133
mimipachi0133

スコア9

title CHANGED
File without changes
body CHANGED
File without changes

1

2015/10/22 03:47

投稿

mimipachi0133
mimipachi0133

スコア9

title CHANGED
File without changes
body CHANGED
@@ -42,155 +42,4 @@
42
42
  ・最後に、[TMP_マスタテーブル][WK_取得開始日割当] [TMP_コードグルーピング] を使用して、各年月日の[年月日](ここでNUMERICに戻しています)[倉庫コード][製品コード親]についての、累計本数を抽出しようとしました。
43
43
 
44
44
  しかしこのSQLを動かしたところ、3時間以上かかっても、1日分のデータも出しきれていませんでした。
45
- 方法は良さそうなのですが、実用に足るスピードアップの方法を考えているところです。
45
+ 方法は良さそうなのですが、実用に足るスピードアップの方法を考えているところです。
46
-
47
- 以下に使用SQLを書きます(ややうろ覚えなので疑問点あればお願いいたします)。
48
-
49
- --このSQLで動かした結果、3時間経過しても全データ抽出ができませんでした。
50
- --今後の利用も考えて長くても20~30分くらいで取得できるようにしたいです。
51
-
52
-
53
- DECLARE
54
- @MASTER_YM AS NUMERIC
55
-
56
- /** M_物流製品親子マスタ(工場系)は過去マスタデータを蓄積するので、最新月しか持たないM_サイズ処理定義マスタ(地区系)と齟齬が起きないように使用年月を固定しています **/
57
- SET @MASTER_YM=(SELECT MAX([年月]) FROM [BI_T].[dbo].[M_サイズ処理定義マスタ]);
58
-
59
- WITH
60
-
61
- /*********************************************************
62
- 日付範囲
63
- **********************************************************/
64
- [WK_日付範囲] AS (
65
- SELECT TOP 7 CONVERT(DATE, CONVERT(CHAR(8), MAX([年月日])), 112) AS [対象年月日]
66
- FROM
67
- (SELECT TOP 7 年月日 FROM [BI_T].[dbo].[T_受注残] GROUP BY 年月日 ORDER BY 年月日 DESC
68
- UNION
69
- SELECT TOP 7 年月日 FROM [BI_T].[dbo].[T_地区在庫] GROUP BY 年月日 ORDER BY 年月日 DESC
70
- )W
71
- GROUP BY [年月日]
72
- ORDER BY [年月日] DESC
73
- ),
74
-
75
- /*********************************************************
76
- 年月日計算
77
- **********************************************************/
78
- [WK_表示年月日計算] AS (
79
- SELECT [基準日], DATEADD(d, -1, [基準日]) AS [集計対象最終日]
80
- FROM
81
- (
82
- SELECT [対象年月日] AS [基準日] FROM [WK_日付範囲]
83
- )Y
84
- ),
85
- [WK_取得開始日割当] AS (
86
- SELECT [基準日],[集計対象最終日],
87
- DATEFROMPARTS(YEAR([集計対象最終日]), MONTH([集計対象最終日]), 1) AS [集計対象初日]
88
- FROM [WK_表示年月日計算]
89
- ),
90
-
91
- /*********************************************************
92
- マスタテーブル --WHERE条件等は、区分の決まりごとなのできにしないでください
93
- **********************************************************/
94
- [TMP_マスタテーブル] AS (
95
- SELECT CONVERT(DATE, CONVERT(CHAR(8), MAX([年月日])), 112) AS [日付]
96
- , [倉庫コード]
97
- , [製品コード親]
98
- , [本数]
99
- FROM
100
- (SELECT
101
- T0.[年月日]
102
- , T0.[出荷先コード] AS [倉庫コード]
103
- , CASE
104
- WHEN M0.[製品コード親] IS NULL THEN T0.[製品コード]
105
- ELSE M0.[製品コード親]
106
- END AS [製品コード親]
107
- , T0.[出荷本数] AS [本数]
108
- FROM
109
- [BI_T].[dbo].[T_工場出荷] T0
110
- LEFT OUTER JOIN
111
- [BI_T].[dbo].[M_物流製品親子マスタ] M0
112
- ON
113
- T0.[製品コード] = M0.[製品コード]
114
- AND @MASTER_YM = M0.[年月]
115
- WHERE
116
- T0.[品種] = 'AT'
117
- AND T0.[内訳] NOT IN ('6','9')
118
- AND T0.[需要先]='1'
119
- AND SUBSTRING(ISNULL(M0.[製品コード親], T0.[製品コード]), 4, 1) != 'T'
120
- AND LEN(T0.[出荷先コード]) > 7 --直送は不要
121
-
122
- UNION ALL
123
-
124
- SELECT
125
- T0.[年月日]
126
- , T0.[出荷先コード] AS [倉庫コード]
127
- , CASE
128
- WHEN M0.[製品コード親] IS NULL THEN T0.[DOT製品コード親]
129
- ELSE M0.[製品コード親]
130
- END AS [製品コード親]
131
- , T0.[出荷本数] AS [本数]
132
- FROM
133
- [BI_T].[dbo].[T_地区出荷] T0
134
- LEFT OUTER JOIN
135
- [BI_T].[dbo].[M_サイズ処理定義マスタ] M0
136
- ON
137
- T0.[DOT製品コード親] = M0.[DOT製品コード親]
138
- WHERE
139
- T0.[品種] = 'AT'
140
- AND T0.[内訳] NOT IN ('6','9')
141
- AND SUBSTRING(ISNULL(M0.[製品コード親], T0.[DOT製品コード親]), 4, 1) != 'T'
142
- AND T0.[受払区分] IN ('C3','G3')
143
-
144
- UNION ALL
145
-
146
- SELECT
147
- T0.[年月日]
148
- , T0.[出荷先コード] AS [倉庫コード]
149
- , CASE
150
- WHEN M0.[製品コード親] IS NULL THEN T0.[DOT製品コード親]
151
- ELSE M0.[製品コード親]
152
- END AS [製品コード親]
153
- , (T0.[入荷本数]*-1) AS [本数]
154
- FROM
155
- [BI_T].[dbo].[T_地区入荷] T0
156
- LEFT OUTER JOIN
157
- [BI_T].[dbo].[M_サイズ処理定義マスタ] M0
158
- ON
159
- T0.[DOT製品コード親] = M0.[DOT製品コード親]
160
- WHERE
161
- T0.[品種] = 'AT'
162
- AND T0.[内訳] NOT IN ('6','9')
163
- AND SUBSTRING(ISNULL(M0.[製品コード親], T0.[DOT製品コード親]), 4, 1) != 'T'
164
- AND T0.[受払区分] = 'C5'
165
- AND LEN(T0.[出荷元コード]) > 7
166
- )Z
167
- GROUP BY
168
- [倉庫コード]
169
- , [製品コード親]
170
- , [本数]
171
- ),
172
- [TMP_コードグルーピング] AS (
173
- SELECT DISTINCT [倉庫コード],[製品コード親] FROM [TMP_マスタテーブル]
174
- )
175
-
176
- SELECT
177
- CAST((CONVERT(VARCHAR,[基準日],112))AS NUMERIC) AS [年月日]
178
- , [倉庫コード]
179
- , [製品コード親]
180
- , (SELECT SUM([本数])
181
- FROM
182
- [TMP_マスタテーブル] M01
183
- WHERE
184
- M01.[倉庫コード]=TM.[倉庫コード] AND M01.[製品コード親]=TM.[製品コード親]
185
- AND
186
- M01.[日付] BETWEEN WK.[集計対象初日] AND WK.[集計対象最終日]) AS [本数]
187
- FROM
188
- [WK_取得開始日割当] WK, [TMP_コードグルーピング] TM
189
- WHERE
190
- (SELECT SUM([本数])
191
- FROM
192
- [TMP_マスタテーブル] M01
193
- WHERE
194
- M01.[倉庫コード]=TM.[倉庫コード] AND M01.[製品コード親]=TM.[製品コード親]
195
- AND
196
- M01.[日付] BETWEEN WK.[集計対象初日] AND WK.[集計対象最終日]) IS NOT NULL