توي روش دوم اول كمترين شماره پرونده كساني كه بيشتر از يك ركورد دارند به وسيله دستور with توي temp ريخته ميشه بعدش مشخصات كامل با توجه به اين شماره پرونده ها با يك join بدست مياد. چون شماره پرونده ها يونيك هستند و تمام شماره پرونده هاي temp مربوط به كساني هستند كه بيشتر از يك ركورد دارند پس اطالاعات مورد نظر بدست مياد.
چون حدس ميزنم با دستور with مشكل داشته باشيد يك مقدار در مورد اون هم توضيح ميدم.
با اين دستور ميتونيد براي يك جستجو اسم تعيين كنيد و توي جستجوي ديگه اي ازش استفاده كنيد
اگه بخوايد چند with تعريف كنيد بايد پشت سر هم باشند و بينشون دستور ديگه اي نباشه ، با "،" از هم جدا ميشن
with h1 as(
Select
'Temp' as T
)
, h2 as(
Select
'Temp2' as T2
,T
from h1
)
,h3 as (
Select
'Temp3' as T3
,*
From h2
)
Select * from h3

بايد توي دستور بعد از آخرين with از يكي از withها حتما استفاده بشه (وگر نه خطا ميده). فقط در دستور بعد از آخرين with ميتونيد از withها استفاده كنيد و بعد از اون ديگه نميشه استفاده كرد.
with بايد اول يك بچ كد باشه (يعني اينكه يا قبل از شروعش دستوري نباشه و يا اينكه قبل از with يك ";" بذاريد.

اميدوارم اين توضيحات بتونه كمكتون كنه.