Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルクエリの抽出(隣のフィールドの値により抽出する方法)
記事No172257
投稿日: 2018/04/24(Tue) 11:41
投稿者nana
解決済: ON
OS:widows7
Access Version:2016

度々質問をさせて頂き、申し訳ありません。
クエリの抽出に関して、質問させてください。

[T_受注テーブル][T_入金テーブル]から[Q_損益計算クエリ]を作成したいです。

[T_受注テーブル]は受注番号順に受注内容、客先s凾ェ入っています。
[T_入金テーブルは]ID番号順に受注番号、入金日、入金金額、回数、が入っています。

回数に関して
1つの受注で入金は2〜3回に分けて入金されます。ですので、回数には○回目の入金の意味で1〜3と入力しています。

前置きが長くなり、申し訳ありません。
[Q_損益計算クエリ]で受注番号順に入金日1(若い順)、金額1、入金日2、金額2、入金日3、金額3とフィールドを作成するにはどうしたら、良いでしょうか。

現在、入金1(日): IIf([回数]="1",[入金日])、入金1(金額): IIf([回数]="1",[入金金額])、金2(日付): IIf([回数]="2",[入金日])、入金2(金額): IIf([回数]="2",[入金金額])

としていますが、受注番号が重複して2段になってしまいます。

受注番号 入金1(日)  入金1(金額)  NULL    NULL 
受注番号 NULL     NULL     入金2(日) 入金2(金額)

となってしまいます。
希望は↓です。

受注番号 入金1(日)  入金1(金額)  入金2(日) 入金2(金額)

とするには、どうしたら良いでしょうか。質問も分かりづらいかと思うのですが、何方かご教授頂けると幸いです。よろしくお願い致します。

タイトルRe: クエリの抽出(隣のフィールドの値により抽出する方法)
記事No172259
投稿日: 2018/04/25(Wed) 14:50
投稿者mayu
解決済: ON
サンプルを載せておきます。

■ < T_入金テーブル >

 id  受注番号  入金日  入金金額  回数
-----------------------------------------------
 1   1111  2018/01/20   1,200   1
 2   1111  2018/01/25    300   2
 3   2222  2018/02/22   3,200   1
 4   3333  2018/01/10   1,000   1
 5   3333  2018/02/20   2,000   2
 6   3333  2018/03/30   3,000   3


■ SQL
----------------------------------------------------------

SELECT 受注番号
     , Max( IIf( 回数 = 1, 入金日 ) )   As 入金日_1
     , Max( IIf( 回数 = 1, 入金金額 ) ) As 入金金額_1
     , Max( IIf( 回数 = 2, 入金日 ) )   As 入金日_2
     , Max( IIf( 回数 = 2, 入金金額 ) ) As 入金金額_2
     , Max( IIf( 回数 = 3, 入金日 ) )   As 入金日_3
     , Max( IIf( 回数 = 3, 入金金額 ) ) As 入金金額_3
FROM T_入金テーブル
GROUP BY 受注番号
ORDER BY 1 ;

----------------------------------------------------------

■ 結果

 受注番号 入金日_1 入金金額_1 入金日_2 入金金額_2 入金日_3 入金金額_3
----------------------------------------------------------------------------
  1111  2018/01/20  1,200  2018/01/25   300   Null    Null
  2222  2018/02/22  3,200   Null    Null   Null    Null
  3333  2018/01/10  1,000  2018/02/20  2,000  2018/03/30  3,000

タイトルRe^2: クエリの抽出(隣のフィールドの値により抽出する方法)
記事No172260
投稿日: 2018/04/25(Wed) 17:50
投稿者nana
解決済: ON
mayuさま
ご回答ありがとうございます!
ですが、SQLは全くわからず、使うことが出来ません。質問では簡略化していますが、損益計算クエリではその他多数のフィールドがあり、頂いたコードをどこに当てはめたらよいのか。。。
SQLを使わないと出来ないという事でしょうか。

これから、勉強してみますので理解するまで少しお時間頂きます。
ご教授ありがとうございます!

タイトルRe^3: クエリの抽出(隣のフィールドの値により抽出する方法)
記事No172261
投稿日: 2018/04/25(Wed) 22:16
投稿者mayu
解決済: ON
> 頂いたコードをどこに当てはめたらよいのか。。。

■ < クエリ SQL文でクエリを編集する >
http://accessvba.blog.so-net.ne.jp/2013-11-11
あたりをご覧になって下さい。 

> SQLを使わないと出来ないという事でしょうか。

クエリの実体は SQL です。

クエリをデザインビューで操作する時は
表示対象の列を選択したり、演算フィールドを作成したり、並び替えを指定したりしますが
これらの作業を実施すると
裏では Access によって作業に応じた SQL が自動で記述されていきます。
つまり、記述した SQL に名前を付けて保存したものが「 クエリ 」になります。

> 受注番号が重複して2段になってしまいます。

ご質問の要点は、ここですよね。
この結果になってしまう原因 は T_入金テーブル に対するクエリの作り方であるため
T_受注テーブル からは列を参照せずに SQL を記載しました。

T_受注テーブル からも列を選択するSQL文は
----------------------------------------------------------

SELECT T_受注テーブル.受注番号
     , 受注内容
     , [客先]
     , Sum( 入金金額 ) As 入金合計
     , Max( IIf( 回数 = 1, 入金日 ) )   As 入金日1
     , Max( IIf( 回数 = 1, 入金金額 ) ) As 入金金額1
     , Max( IIf( 回数 = 2, 入金日 ) )   As 入金日2
     , Max( IIf( 回数 = 2, 入金金額 ) ) As 入金金額2
     , Max( IIf( 回数 = 3, 入金日 ) )   As 入金日3
     , Max( IIf( 回数 = 3, 入金金額 ) ) As 入金金額3
FROM T_受注テーブル
INNER JOIN T_入金テーブル
        ON T_受注テーブル.受注番号 = T_入金テーブル.受注番号
GROUP BY T_受注テーブル.受注番号
       , 受注内容
       , [客先]
ORDER BY T_受注テーブル.受注番号 ;

----------------------------------------------------------
という感じになります。

SQLビューとデザインビューは相互に切り替えが可能ですから
私が記載したSQL文を SQLビューに貼り付けた後は
デザインビューに切り替えて、列を適宜 添削すればよろしいでしょう。

なお、記事No: 172257 で
クエリの演算フィールドにおける 回数フィールドの扱いが
テキスト型になっていますが、数値型が適切でしょう。
もしテキスト型であれば、SQL文中の

  回数 = 1 
は
  回数 = '1'

というように 数字を引用符で括って下さい。

タイトルRe^4: クエリの抽出(隣のフィールドの値により抽出する方法)
記事No172262
投稿日: 2018/05/01(Tue) 18:05
投稿者nana
解決済: ON
mayu様

ご丁寧にご教授頂きありがとうございます。
添付頂いたURL等を拝見しまし、チャレンジしましたが、上手く行きません。私の理解不足です。

お手数をおかけし、申し訳ありません。

今、SQLの本を購入し勉強を始めましたので、もう少し時間をください。また、近日中にご報告をさせて頂きます!

せっかくご教授いただいたのに、すっきりするご報告ができずに申し訳ありません。

タイトルRe^5: クエリの抽出(隣のフィールドの値により抽出する方法)
記事No172265
投稿日: 2018/05/02(Wed) 18:04
投稿者nana
解決済: ON
mayu様

できました!ありがとうございます!!本っ当に、助かりました!
まだ、パラメータ入力を数回求められてしまうため、完全ではありませんが、入金日及び金額を横並びにすることが出来ました。

これから、勉強を続けてまいりますので、今後ともご教授頂けると幸いです。
よろしくお願い致します。

タイトルRe^6: クエリの抽出(隣のフィールドの値により抽出する方法)
記事No172268
投稿日: 2018/05/07(Mon) 08:20
投稿者nana
解決済: ON
Close忘れました。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る