同じIDの2つの行のデータを1つの行にマージしたい
私はExcelからデータをインポートしましたが、IDは最大3つの異なるテストでスコアを上げることができます.Accessクエリですべてをまとめると、1つのスコアが1行目にあり、他の2つは2行目にあります.3つすべてを同じ行に表示するにはどうすればよいですか.グループ化を試みましたが、変更はありませんでした.
返信リスト(回答:3)
リレーショナルデータベースは、スプレッドシートとはまったく異なる方法でデータを格納するため、後者から前者にデータをインポートする場合は、データを再構築する必要があります.提供したサンプルデータから、あるエンティティタイプの3つの属性があるように見えます.最初の3列で、etと呼び、a1、a2、a3.他の3つの列は、3つのテストのスコアを表しているとのことです.s1、s2、s3と呼びます.
リレーショナルデータベースでは、これは2つのtableでモデル化されます.1つはエンティティタイプetをモデル化し、列はa1、a2、a3です.主キーをa1と仮定しますが、データから、最初の3列は候補キーであり、ファイナルtableの単一の一意のインデックスに含める必要があるようですet.
スコアと呼ぶ2番目のtableには、ta1が含まれます.em>、およびsと呼ぶスコアの列.もちろん、これらは実際の列名ではなく、それぞれが列によって表される属性を説明します.
まず、tableetに、次のような「追加」クエリを使用して個別の行を入力する必要があります.ここで、TestScoresは元のtableの名前です.
INSERT INTO et(a1、a2、a3)
SELECT DISTINCT a1、a2、a3
FROM TestScores;
次に、関連するtableに次のような3つの追加クエリを入力する必要があります.
INSERT INTOスコア(a1、t、s)
SELECT a1、 "Test1"、s1
TestScoresから
WHEREs1はNULLではありません.
INSERT INTOスコア(a1、t、s)
SELECT a1、 "Test2"、s2
TestScoresから
WHEREs2はNULLではありません.
INSERT INTOスコア(a1、t、s)
SELECT a1、 "Test3"、s3
TestScoresから
WHEREs3はNULLではありません.
これで、2つの関連するtableの正しく構造化されたセットができたので、主キー列と外部キー列a1に関係を作成し、参照整合性を適用できます.もちろん、Test1、Test2、Test3の代わりに、3つのテストに任意の名前を使用できます.必要な形式で結果tableを返すには、1行に3つのスコアがあり、単純なクロス集計クエリが必要です.
PS: よく調べてみると、参照されるエンティティタイプには4つの属性があることがわかりました.そのため、a4列をtableに追加する必要がありますet.
私はあなたの繰り返しの列に関して他の人に同意します.ただし、次のような合計クエリを試すことができます:
SELECT FieldA、FieldB、FieldC、Max(FieldD)as D、Max(FieldE)as E、Max(FieldF)as F
FROM YourTableName
GROUP BY FieldA、FieldB、FieldC
これが唯一の方法ではないかもしれませんが、それを行う1つの方法は、テストごとに個別のクエリを作成し、最後のクエリを1つ使用して、それらすべてを1つに結合することです.