実現したいこと
SQL文をより簡潔化し、上平均、下平均、平均を容易に確認できるviewを作成したいです。
実行日から過去半年間を明細として表示
それらの平均値が下平均
実行日から7~12カ月前が上平均
12カ月前からのものが平均
それぞれ別々のSQLで作成し、UNION ALLで結合しました。
発生している問題・分からないこと
SQL初心者です。おかしい質問や必要な情報が足りない等あるかと存じます。
申し訳ございませんがその際はご指導いただけますと幸いです。
<マスタ項目については、トランザクションのunion allの結果に対して結合するときれいです。>
上記のご指導を頂きました。この内容が理解できず、恐れ入りますが教えていただけますと幸いです。
該当のソースコード
SQLSERVER
1 SELECT TZ.[組織コード] 2 , TZ.[倉庫コード] 3 , SKM.[倉庫名] 4 , TZ.[品目コード] 5 , HM.[品目名1] 6 , HM.[品目名2] 7 , TZ.[対象年月] 8 , TZ.[売上数] 9FROM [yoshimei].[dbo].[TT_月別在庫] TZ 10INNER JOIN [yoshimei].[dbo].[TM_品目マスタ] HM 11 ON TZ.[品目コード] = HM.[品目コード] 12LEFT JOIN [yoshimei].[dbo].[TM_倉庫マスタ] SKM 13 ON TZ.[倉庫コード] = SKM.[倉庫コード] 14 WHERE TZ.[対象年月]BETWEEN 15 [dbo].[fn_会計年月](dateadd(m,-6,GETDATE())) AND [dbo].[fn_会計年月](GETDATE()) 16UNION ALL 17SELECT TZ.[組織コード] 18 ,TZ.[倉庫コード] 19 , SKM.[倉庫名] 20 , TZ.[品目コード] 21 , HM.[品目名1] 22 , HM.[品目名2] 23 ,'上平均' 24 , AVG(TZ.[売上数]) 25FROM [yoshimei].[dbo].[TT_月別在庫] TZ 26INNER JOIN [yoshimei].[dbo].[TM_品目マスタ] HM 27 ON TZ.[品目コード] = HM.[品目コード] 28LEFT JOIN [yoshimei].[dbo].[TM_倉庫マスタ] SKM 29 ON TZ.[倉庫コード] = SKM.[倉庫コード] 30 WHERE TZ.[対象年月]BETWEEN 31 [dbo].[fn_会計年月](dateadd(m,-12,GETDATE())) AND 32 [dbo].[fn_会計年月](dateadd(m,-7,GETDATE())) 33 GROUP BY TZ.[組織コード],TZ.[倉庫コード], SKM.[倉庫名], TZ.[品目コード], HM.[品目名1] , HM.[品目名2] 34UNION ALL 35 SELECT TZ.[組織コード] 36 , TZ.[倉庫コード] 37 , SKM.[倉庫名] 38 , TZ.[品目コード] 39 , HM.[品目名1] 40 , HM.[品目名2] 41 ,'下平均' 42 , AVG(TZ.[売上数]) 43FROM [yoshimei].[dbo].[TT_月別在庫] TZ 44INNER JOIN [yoshimei].[dbo].[TM_品目マスタ] HM 45 ON TZ.[品目コード] = UKM.[品目コード] 46LEFT JOIN [yoshimei].[dbo].[TM_倉庫マスタ] SKM 47 ON TZ.[倉庫コード] = SKM.[倉庫コード] 48 WHERE TZ.[対象年月]BETWEEN 49 [dbo].[fn_会計年月](dateadd(m,-6,GETDATE())) AND [dbo].[fn_会計年月](GETDATE()) 50 GROUP BY TZ.[組織コード],TZ.[倉庫コード], SKM.[倉庫名], TZ.[品目コード], HM.[品目名1] , HM.[品目名2] 51UNION ALL 52 SELECT TZ.[組織コード] 53 , TZ.[倉庫コード] 54 , SKM.[倉庫名] 55 , TZ.[品目コード] 56 , HM.[品目名1] 57 , HM.[品目名2] 58 ,'平均' 59 , AVG(TZ.[売上数]) 60FROM [yoshimei].[dbo].[TT_月別在庫] TZ 61INNER JOIN [yoshimei].[dbo].[TM_品目マスタ] HM 62 ON TZ.[品目コード] = HM.[品目コード] 63LEFT JOIN [yoshimei].[dbo].[TM_倉庫マスタ] SKM 64 ON TZ.[倉庫コード] = SKM.[倉庫コード] 65 WHERE TZ.[対象年月]BETWEEN 66 [dbo].[fn_会計年月](dateadd(m,-12,GETDATE()))AND [dbo].[fn_会計年月](GETDATE()) 67 GROUP BY TZ.[組織コード],TZ.[倉庫コード], SKM.[倉庫名], TZ.[品目コード], HM.[品目名1] , HM.[品目名2] 68
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
調べたのですが、
トランザクションデータ(売上数など)を「union all」で結合します。その結果を基に、マスタデータ(組織コード、倉庫コード、品目コードなど)を結合すると、データがきれいに整理され、処理も効率的になります。
上記回答では私の頭では理解できず。。。申し訳ございませんが猿でもわかるように教えていただけますと幸いです。
補足
特になし
回答1件
あなたの回答
tips
プレビュー