プロが教えるわが家の防犯対策術!

[既存のテーブル]
2008年1月1日 Aさん
2008年1月2日 Bさん
2008年1月3日 Cさん
2008年1月4日 Aさん
2008年1月5日 Aさん
2008年1月6日 Cさん
2008年1月7日 Cさん
2008年1月8日 Bさん
2008年1月9日 Aさん

[求めるカタチ]
2008年1月1日 Aさん 1回目
2008年1月2日 Bさん 1回目
2008年1月3日 Cさん 1回目
2008年1月4日 Aさん 2回目
2008年1月5日 Aさん 3回目
2008年1月6日 Cさん 2回目
2008年1月7日 Cさん 3回目
2008年1月8日 Bさん 2回目
2008年1月9日 Aさん 4回目

ACCESSで「既存のテーブル」を「求めるカタチ」のようにしたいと考えています。

クエリを使う方法が思いつかなかったため、DAOを使って一行ずつ更新する方法を取ってはみたのですが、時間がかかってしまうため、何か効率的な方法を探しています。

アドバイスお願いいたします。

A 回答 (3件)

抽出だけならNo.1の方のSQLで大丈夫です。


但し、既存のテーブルに「何回目」というフィールドがあり、それを
更新したいとなると、話が別です。更新クエリは1:1、又は1:nのn側だけ
更新することができます。既存テーブルが日付と人名をキーにしている場合、
結合相手もこの項目で一意になることが必要です。しかし、クエリが結合相手ですと、
クエリには一意キーが無いので、ターゲットに対して相手が複数になる可能性が
否定できません。つまり、ターゲットが1:nの1側になると言うことです。
人間には一意になると分かっていますが、物理的な一意キーがない以上、
機械的に更新不可能と判断さてしまいます。

これを回避するには同じレイアウトで、日付と人名を一意キーとする一時テーブルを
作成します。ここにNo.1の方のSQLを基にしてINSERTを行い、これと結合させれば、
一意キー同士の結合なので、1:1の関係が保証され、更新可能になります。
    • good
    • 0
この回答へのお礼

丁寧なフォローありがとうございます。
No.1の方に教えたいただいた方法で解決しました。

お礼日時:2008/06/09 16:03

クエリデザイナでやるなら


そのテーブルを2個追加します
年月日、氏名、年月日 フィールドを追加して集計をONにします
2番目の年月日をカウントにします
新たに 年月日、氏名を追加して テーブルを2個目テーブル名にして集計をWhere条件にします
# _1などが追加されているテーブル名
追加した年月日の抽出条件に
<=[元テーブル名]![年月日]
追加した氏名の抽出条件に
=[元テーブル名]![氏名]
とします

出来上がったSQLです
SELECT myTable03.myDate, myTable03.myName, Count(myTable03.myDate) AS myDateのカウント
FROM myTable03, myTable03 AS myTable03_1
WHERE (((myTable03_1.myDate)<=[myTable03]![myDate]) AND ((myTable03_1.myName)=[myTable03]![myName]))
GROUP BY myTable03.myDate, myTable03.myName
ORDER BY myTable03.myDate;

# Dxak氏のSQLをAccess2003で実行しましたが希望の結果が得られませんでした
# 元テーブルと追加テーブルを結合してしまうとだめなようです
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございます。
Dxakさんに教えていただいた方法にちょっと手を加えたところ解決しました。

お礼日時:2008/06/09 16:01

カテが違うんですけど・・・



テーブル名「例えば」
「年月日」、「氏名」で、フィールド名が初期として

SQL文で

SELECT 例えば.年月日, 例えば.氏名, Count(例えば.年月日) AS 回数
FROM 例えば INNER JOIN 例えば AS 例えば_1 ON 例えば.氏名 = 例えば_1.氏名
WHERE 例えば_1.年月日<=[例えば]![年月日]
GROUP BY 例えば.年月日, 例えば.氏名;

で、結果は出ますよ
「回目」と、言うのは表示形式で代用してください
    • good
    • 0
この回答へのお礼

カテ違い申し訳ありませんでした。
教えていただいた方法を参考にしたところ解決しました。
ありがとうございます。

お礼日時:2008/06/09 16:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!