dポイントプレゼントキャンペーン実施中!

お教えください。
次のようなデータを扱います。

氏名|試験日|科目|点数
AA|20110830|国語|100
AA|20110830|算数|60
AA|20110831|国語|80
AA|20110831|算数|80
BB|20110630|国語|90
BB|20110630|算数|100
CC
DD



100点を取った日のデータに、新たにフィールドを作り、フラグを立てたいのです。(上記ではAAさんの20110830の算数のデータにも、BBさんの20110630の国語のデータにもフラグが立つように・・・)
下記のようなデータにしたい。

氏名|試験日|科目|点数|満点日
AA|20110830|国語|100|1
AA|20110830|算数|60 |1
AA|20110831|国語|80 |0
AA|20110831|算数|80 |0
BB|20110630|国語|90 |1
BB|20110630|算数|100|1

つまり、氏名と試験日が一致するもので、同じ日の点数に1つでも100が入っているデータを、ピックアップするためです。

クエリで
氏名と試験日をグループ化するところまでは行きましたが、1つでも100が入っている場合・・・というのができず。

よろしくお願いします。

A 回答 (4件)

先ず、100点を取っている、氏名、試験日を抽出するクエリーを作ります。


内容は、固有の値を「はい」にして、下記のとおりです。

100点抽出:
SELECT DISTINCT T1.氏名, T1.試験日
FROM T1
WHERE (((T1.点数)=100));

実行結果です:
氏名試験日
AA|2011/08/30
BB|2011/06/30

次に、T1とクエリー「100点抽出」を用いて、次のようにクエリーを作ります。
氏名と試験日を繋ぐ形です。

目的の抽出:
SELECT T1.氏名, T1.試験日, T1.科目, T1.点数
FROM T1 INNER JOIN 100点抽出 ON (T1.試験日 = [100点抽出].試験日) AND (T1.氏名 = [100点抽出].氏名)
ORDER BY T1.氏名, T1.試験日;

クエリーの実行結果です。
氏名|試験日|科目|点数
AA|2011/08/30|国語|100
AA|2011/08/30|算数|60
BB|2011/06/30|国語|90
BB|2011/06/30|算数|100

フラッグを作らなくとも、目的は達せらると思います。
これで如何ですか?
    • good
    • 0

A____2011/11/11_国語_100_1


A____2011/11/11_算数__90_1
B____2011/11/11_国語__80_0
B____2011/11/11_算数__80_0
C____2011/11/11_国語__90_1
C____2011/11/11_算数_100_1

このような結果を得るクエリは・・・。

SELECT
 氏名,
 試験日,
 科目,
 点数,
 IIf(DMax("点数","T1","氏名='" & [氏名] & "' AND 試験日=#" & [試験日] & "#")=100,1,0) AS flag
FROM T1;
    • good
    • 0

下記のようにすれば100点を取った人を抽出できます。


---
SELECT A.*
FROM T_TABLE A
INNER JOIN
(SELECT 氏名,試験日
FROM T_TABLE
WHERE 点数 = 100
GROUP BY 氏名,試験日) B
ON A.氏名 = B.氏名 AND A.試験日 = B.試験日


100点以外の人も抽出したいときは
---
SELECT A.*
,IIF(IsNULL(B.氏名),'0','1') AS フラグ
FROM T_TABLE A
LEFT JOIN
(SELECT 氏名,試験日
FROM T_TABLE
WHERE 点数 = 100
GROUP BY 氏名,試験日) B
ON A.氏名 = B.氏名 AND A.試験日 = B.試験日
    • good
    • 0

フィールドに Max([点数]) を設けて 抽出条件が 100 とすればいいのでは?

    • good
    • 0

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