DECLARE @table TABLE( mnbr int,
Pid int,
Pname varchar(10),
Jid int,
Jname varchar(10))
INSERT INTO @table
VALUES(150 , 1 , 'Mark' , 8 ,'Jerry')
,(250 , 1 , 'Mark' , 8 , 'Jerry')
,(350 , 2 , 'Jim' , 9 , 'Luke')
,(450 , 2 , 'Jim' , 9 , 'Luke')
,(550 , 2 , 'Jim' , 10 , 'Jude')
,(650 , 3 , 'Andy' , 11 , 'Matt')
,(750 , 4 , 'Brian' , 21 , 'Chris')
,(850 , 4 , 'Brian' , 7 , 'Mac')
,(950 , 5 , 'Jean ' , 21 , 'Chris')
上記のデータの場合.....私の出力は次のようになります。
350 2 Jim 9 Luke
450 2 Jim 9 Luke
550 2 Jim 10 Jude
750 4 Brian 21 Chris
850 4 Brian 7 Mac
mnbr 150 と 250 の場合.... 一次所有者マークには 2 つの共同口座があり、両方の共同口座の共同所有者は jerry です。したがって、Mark のアカウントは表示されません。
mnbrの場合:350、450、550
ジムは 3 つの共同口座を持っていますが、3 つの共同口座のすべてが同じ共同所有者に属しているわけではありません。したがって、3 つのアカウントすべてを表示する必要があります。
Mnbr 650 には、共同所有者が 1 人の共同口座が 1 つしかありません。したがって、表示されるべきではありません。
必要なデータを返す次のクエリを作成しました。
SELECT * FROM @table WHERE pname IN (
SELECT pname FROM @table
WHERE pname IN (SELECT pname FROM @table GROUP BY pname,jname HAVING COUNT(*)!>1)
GROUP BY pname HAVING COUNT(*)>1
)
知りたいのですが、私のクエリは優れたパフォーマンスを提供しますか?