|
>> 第1に、支払コードに関して、結果クエリで表示させたいフィールドは、
>>計3つのフィールドのうち、どのテーブルの何というフィールドですか。
>>なお、これは、作りたいクエリのSELECT句の問題です。
>表示させたいのは氏名テーブルの支払コードです
したがって、SQL文のSELECT句は、
SELECT 氏名テーブル.支払コード
となります。
>> 第2に、結果クエリの第2フィールドの値は、
>>氏名テーブルのどのフィールドについて、どのような集計を行った値なのですか。
>>これも、作りたいクエリのSELECT句の問題です。
>グループアップさせて金額は合計させています
作りたいクエリは、集計クエリということですね。
SQL文のSELECT句は
SELECT 氏名テーブル.支払コード
,Sum(氏名テーブル.金額)
となります。
また、GROUP BY句に「氏名テーブル」の「支払コード」フィールドを指定する必要があります。
集計クエリにおいて、集計を行うフィールド以外のフィールドを表示したい場合、
表示したいフィールドをGROUP BY句に書く必要があります。
もっとも、GROUP BY句の本来の意味は、指定したフィールドでグループ化が行われること
なので、むやみにGROUP BY句に書くわけにはいきませんが。
>> 第5に、結果クエリにおける集計対象に、
>>氏名テーブルにおけるIDが1であるレコードと
>>IDが5であるレコードとが含まれるのは、
>>どういう抽出条件あるいは結合条件を設けるからですか。
>コードが重複してる件?に関しては伝票番号だと思っていただければ
>納得いただけると・・・
>> 第6に、結果クエリという集計クエリにおいて、
>>氏名テーブルにおけるIDが3であるレコードとIDが4であるレコードとが
>>集計対象から除外されるのはどういう抽出条件あるいは結合条件を設けるからですか。
>会社名称変換テーブルの変更前にあるコードが一致すれば結果クエリには表示させないとしたいからです
>> 第7に、結果クエリという集計クエリにおいて、
>>氏名テーブルにおけるIDが2であるレコードが集計対象に含まれるのは
>>どういう抽出条件あるいは結合条件を設けるからですか。
>会社名称変換テーブルの変更前フィールドのC0003をはぶいて
>合計させた結果になります
「会社名称変換テーブル」の「変更前」フィールドに値があるものは、
集計対象から除外するということですね。
つまり、集計対象は、「会社名称変換テーブル」の「変更前」フィールドに値がないもの
とするということですね。
そして、これが抽出条件だということですね。
そうすると、WHERE句は、
WHERE 会社名称変換.変更前 Is Null
となります。
最後に、FROM句についてですが、
「変更前」フィールドに値がないものを集計するのだから、
集計対象には、「氏名テーブル」の全レコードを含める必要があります。
したがって、「氏名テーブル」と「会社名称変換テーブル」は、左外部結合をさせます。
結合フィールドは、「氏名テーブル」の「支払コード」フィールドと
「会社名称変換テーブル」の「変更前」フィールドとなります。
今回は、2つのテーブルの結合の仕方が、どのようなレコードを抽出したいかということと
関係すると思ったので、FROM句を最後に説明しましたが、
SQL文を書くときには「まずFROM句から書け。SELECT句はその後だ」と言う人もいます。
取り入れてもいいアドヴァイスだと思います。
>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
結果クエリにおいて表示したいフィールドは、「氏名テーブルの支払コード」なんでしたよね。
このことを前提とすれば、支払コードの振替えという事態はあり得ないんですけど。
ここからは、ちょっと系統が異なるアドヴァイスになりますが、
クエリを作るときは、頭の中でSQL文をあれこれ考えるよりは、
全レコード、全フィールドが表示されたクエリを見て、
「このフィールドはいらない」、「このレコードはいらない」とかなどと考え、
それを元にSELECT句やWHERE句を考えた方が、考えがまとまりやすいことがあります。
SELECT T1.ID,T1.支払コード,T1.金額,T2.ID,T2.変更前,T2.変更後
FROM 氏名 AS T1
LEFT JOIN 会社名称変換 AS T2
ON T1.支払コード = T2.変更前;
というクエリを表示させてみて、SELECT句やWHERE句をどうするか考えてみたらどうでしょうか。
|
|