コードが更新されました: [score]列が#leftテーブルに追加されました。結合では、#leftテーブルから学生の名前とスコアを取得する必要があります。1つのスコアで問題ありませんが、重複したstudent_idを取得することはできません。カーソルでできると思いますか?
このレポートを実行しています。問題は、私が作成したスクリプトに似ています。要約すると、2つのテーブルがあり、それを#leftと#rightと呼びます。#rightテーブルは、金額を含む重要なテーブルです。ただし、#leftテーブルには、取得する必要のあるエージェント名も含まれています。
create table #left (
id int not null primary key identity,
student_id int, name varchar(20),score int)
insert into #left values( 1, 'James',10)
insert into #left values( 2, 'Parker',20)
insert into #left values( 3, 'Smith',30)
insert into #left values( 4, 'Rog',40)
insert into #left values( 1, 'James',50)
insert into #left values( 2, 'Parker',60)
create table #right (
id int not null primary key identity,
student_id int,
amount decimal(5,2)
)
insert into #right values (1,5.25)
insert into #right values (3,7.25)
insert into #right values (4,3.25)
insert into #right values (1,5.25)
ここでの問題は、student_idの2つのテーブルを結合したいのですが、ご覧のとおり、#leftテーブルには同じIDのJamesとParkerが2回含まれています。これがデータベースの間違いだったとしましょう。
同様の問題が#rightテーブルに存在する可能性があります。しかし、それは間違いではありません。これは単に、#leftの学生が2つの支払いに関連付けられていたことを意味します(2つの支払いが同じであっても)。
#leftテーブルから重複を削除し、#rightテーブルに重複を保持したいと思います。
私はこのクエリを思いついた、それはうまくいく
/* query 1 */
select student_id, amount from #right R
where exists
(
select student_id from #left L
where R.student_id = L.student_id
);
しかし、ここでの問題は、他のテーブルから学生の名前も取得する必要があることです。それを行う方法はありますか?任意の構文にすることができますが、効率的なクエリが望ましいです。