テーブルから、クロス集計クエリを作成した後に結合をしたい。
クロス集計クエリ1とクロス集計クエリ2を作成。
[年度,売cd,売り先名,仕入cd,仕入先名,種類,1週,2週,3週,4週]
クロス集計クエリ1とクロス集計クエリ2の違いは、年度の抽出条件が2020年と2021年。
クロス集計クエリ1とクロス集計クエリ2を、横方向に結合したい。
結合条件は、売cd,仕入cd,種類が一致した物を横方向に結合。
片方にしか存在しないものも表示する。
完成クエリのイメージは以下
[売cd,売り先名,仕入cd,仕入先名,種類,当年1週,当年2週,当年3週,当年4週.昨年1週,昨年2週,昨年3週,昨年4週]
現在は、クロス集計クエリ1とクロス集計クエリ2をVBAで読み込みループで一致する項目を探して新規テーブルを作成し書き込みで処理。
クエリやSQLで解決を行いたい。
よろしくお願いいたします。
以下追記 20210710
クエリで実績テーブルから必要情報のみを抜き出すクエリを作成しています。
その際に、月曜開始で何週目かを判定させています。
下記SQL
SELECT T_実績.売立日, T_実績.売先_CD, T_得意先M.得意先名称, T_実績.仕入先_CD, T_仕入先M.仕入先名称, T_実績.品目_CD, T_品目M.品名, T_実績.登録品目名, T_実績.数量, T_実績.売り_単価, T_実績.仕入_単価, DateDiff("ww",DateSerial(Year([売立日]),Month([売立日]),2),[売立日])+1 AS 週目, T_実績.規格
FROM T_品目M INNER JOIN (T_仕入先M INNER JOIN (T_得意先M INNER JOIN T_実績 ON T_得意先M.得意先コード = T_実績.売先_CD) ON T_仕入先M.仕入先コード = T_実績.仕入先_CD) ON T_品目M.[コード] = T_実績.品目_CD
WHERE (((T_実績.売立_年)=2020) AND ((T_実績.売立_月)=6));
条件を2020で[Q_昨年]と2021で[Q_当年]二つのクエリを作成しています。
[Q_昨年]と[Q_当年]をそれぞれクロス集計クエリで週目を計算しています。
下記SQL
TRANSFORM Sum(Q_当年.数量) AS 数量の合計
SELECT Q_当年.売先_CD, Q_当年.得意先名称, Q_当年.仕入先_CD, Q_当年.仕入先名称, Q_当年.品目_CD, Q_当年.品名, Q_当年.規格
FROM Q_当年
GROUP BY Q_当年.売先_CD, Q_当年.得意先名称, Q_当年.仕入先_CD, Q_当年.仕入先名称, Q_当年.品目_CD, Q_当年.品名, Q_当年.規格
PIVOT Q_当年.週目;
[Q_昨年_クロス]と[Q_当年_クロス]
を結合して、昨年と当年を横に並べたいです。
> クロス集計クエリ1とクロス集計クエリ2の違いは、年度の抽出条件が2020年と2021年。
当月と前年同月の比較なら、抽出条件は年月ですよね。
1~4週としていますが、月をどのような条件で4週に分けているんでしょう?
これらを明らかにするのに、現在のクエリーの内容も質問に追記されて下さい。
まず、クエリで実績テーブルから必要情報のみを抜き出すクエリを作成しています。
その際に、月曜開始で何週目かを判定させています。
下記SQL
---------------------
SELECT T_実績.売立日, T_実績.売先_CD, T_得意先M.得意先名称, T_実績.仕入先_CD, T_仕入先M.仕入先名称, T_実績.品目_CD, T_品目M.品名, T_実績.登録品目名, T_実績.数量, T_実績.売り_単価, T_実績.仕入_単価, DateDiff("ww",DateSerial(Year([売立日]),Month([売立日]),2),[売立日])+1 AS 週目, T_実績.規格
FROM T_品目M INNER JOIN (T_仕入先M INNER JOIN (T_得意先M INNER JOIN T_実績 ON T_得意先M.得意先コード = T_実績.売先_CD) ON T_仕入先M.仕入先コード = T_実績.仕入先_CD) ON T_品目M.[コード] = T_実績.品目_CD
WHERE (((T_実績.売立_年)=2020) AND ((T_実績.売立_月)=6));
---------------------
条件を2020で[Q_昨年]と2021で[Q_当年]二つのクエリを作成しています。
[Q_昨年]と[Q_当年]をそれぞれクロス集計クエリで週目を計算しています。
下記SQL
---------------------
TRANSFORM Sum(Q_当年.数量) AS 数量の合計
SELECT Q_当年.売先_CD, Q_当年.得意先名称, Q_当年.仕入先_CD, Q_当年.仕入先名称, Q_当年.品目_CD, Q_当年.品名, Q_当年.規格
FROM Q_当年
GROUP BY Q_当年.売先_CD, Q_当年.得意先名称, Q_当年.仕入先_CD, Q_当年.仕入先名称, Q_当年.品目_CD, Q_当年.品名, Q_当年.規格
PIVOT Q_当年.週目;
---------------------
[Q_昨年_クロス]と[Q_当年_クロス]
を結合して、昨年と当年を横に並べたいです。
質問は編集できるので、SQLは質問に追記して下さい。
本題ではありませんが、週目について、カレンダーでの何週目かで比較していますが、年が変われば各週の日数は違いますが、その比較でいいんでしょうか?
追記致しました。
何週目かは下記で行っています。
DateDiff("ww",DateSerial(Year([売立日]),Month([売立日]),2),[売立日])+1
どのようなではなく、比較される週の日数が異なる場合があるけどそれでいいの?です。
比較するなら7日区切りで比較とかが普通だと思います。
その場合4週目は月末までとかにしたりしますけどね。
日数が異なっていて大丈夫です。
教えて頂いたコードは、本日は試せないので明日行います。
回答2件
あなたの回答
tips
プレビュー