Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
同一日付でレコード数の異なるデータ同士を連結したい
投稿日時: 20/04/02 14:36:48
投稿者: sasa

お世話になっております。sasaです。
さて、同一日付でレコード数の異なるデータ同士を連結したいのですが、
どうしても方法がわかりません。
別途テーブルを作成する方法等でも構いませんので、お教えいただけると助かります。
 
現在のテーブル(クエリで金額をマイナスのものも正数化してあります)は、
日付 金額 項  目 レコード区分
4/1 100 項目名1    1
4/1 200 項目名2    1
4/1 300 項目名3    1
4/1 400 項目名4    1
4/1 900 項目名5    2
4/1 100 項目名6    2
 
といったものが、複数日分あります。
金額は正数に変換しておりますが、元の金額がマイナスの場合はレコード区分が通常1のものは2、
通常2のものは1になるような仕組みですが、レコード区分1より2が多くなることはないです。
 
 
最終的に、現在のテーブル内容を、以下のような形にしたいのです
レコード区分1は、左側、2は右側といった形です。
日付 金額 項  目  金額 項  目
4/1 100 項目名1  900 項目名5
4/1 200 項目名2  100 項目名6
4/1 300 項目名3
4/1 400 項目名4
 
しかし、日付で関連付けも出来ませんし、どうしたものかと思い、ご助言何卒お願い致します。
 
お手数をお掛けいたしますがよろしくお願い致します。
 

回答
投稿日時: 20/04/02 15:06:58
投稿者: sk

引用:
最終的に、現在のテーブル内容を、以下のような形にしたいのです
レコード区分1は、左側、2は右側といった形です。
日付 金額 項  目  金額 項  目
4/1 100 項目名1  900 項目名5
4/1 200 項目名2  100 項目名6
4/1 300 項目名3
4/1 400 項目名4

そのようなレイアウトにするのは何のためなのでしょうか。

回答
投稿日時: 20/04/03 01:10:24
投稿者: よろずや

このような処理は、クエリではなくアプリ側でやるべきことです。
 
あえてクエリでやるなら、以下のSQLをクエリのSQLビューに貼り付ければできます。
 

SELECT E.日付, E.金額, E.項目, F.金額, F.項目
FROM (
    SELECT A.日付, A.金額, A.項目, (
        SELECT COUNT(*)
        FROM テーブル AS B
        WHERE A.日付 = B.日付 AND A.項目 >= B.項目 AND B.レコード区分=1) AS 行番
    FROM テーブル AS A
    WHERE A.[レコード区分] = 1)  AS E
LEFT JOIN (
    SELECT C.日付, C.金額, C.項目, (
        SELECT COUNT(*)
        FROM テーブル AS D
        WHERE C.日付 = D.日付 AND C.項目 >= D.項目 AND D.レコード区分=2) AS 行番
    FROM テーブル AS C
    WHERE C.[レコード区分] = 2)  AS F
ON (E.日付 = F.日付) AND (E.行番 = F.行番)
GROUP BY E.日付, E.金額, E.項目, F.金額, F.項目;

投稿日時: 20/04/06 13:38:48
投稿者: sasa

sk様
すみません、目的がはっきりしないとわかりづらいですね。
 
レジデータを基に、経理用の伝票作成をするため、借方と貸方を分ける必要があり、
その為にこのような形にしたく、お願い致しました。
 
 
 

sk さんの引用:
引用:
最終的に、現在のテーブル内容を、以下のような形にしたいのです
レコード区分1は、左側、2は右側といった形です。
日付 金額 項  目  金額 項  目
4/1 100 項目名1  900 項目名5
4/1 200 項目名2  100 項目名6
4/1 300 項目名3
4/1 400 項目名4

そのようなレイアウトにするのは何のためなのでしょうか。

投稿日時: 20/04/06 13:41:14
投稿者: sasa

よろずや様
 
ご回答ありがとうございます。
ありがとうございました。無事出来ました。
元々の構造を変更した方がよいかなとも思ったのですが、時間もなく、、。
又、会計ソフトへの取込等にも使用する為、どうしてもデータとしてあのような
形にしたかったのです。
非常にたすかりました。
 
ありがとうございました。
 
 
 
 
 
 

よろずや さんの引用:
このような処理は、クエリではなくアプリ側でやるべきことです。
 
あえてクエリでやるなら、以下のSQLをクエリのSQLビューに貼り付ければできます。
 
SELECT E.日付, E.金額, E.項目, F.金額, F.項目
FROM (
    SELECT A.日付, A.金額, A.項目, (
        SELECT COUNT(*)
        FROM テーブル AS B
        WHERE A.日付 = B.日付 AND A.項目 >= B.項目 AND B.レコード区分=1) AS 行番
    FROM テーブル AS A
    WHERE A.[レコード区分] = 1)  AS E
LEFT JOIN (
    SELECT C.日付, C.金額, C.項目, (
        SELECT COUNT(*)
        FROM テーブル AS D
        WHERE C.日付 = D.日付 AND C.項目 >= D.項目 AND D.レコード区分=2) AS 行番
    FROM テーブル AS C
    WHERE C.[レコード区分] = 2)  AS F
ON (E.日付 = F.日付) AND (E.行番 = F.行番)
GROUP BY E.日付, E.金額, E.項目, F.金額, F.項目;