質問編集履歴
3
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
2
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
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
|