View Full Version : محاسبه موارد تو در تو در یک جدول
Hamid_PaK
پنج شنبه 23 اسفند 1386, 16:12 عصر
با سلام؛
من یک جدول دارم که دارای چند فیلد است که در این میان دو فیلد برای محاسبه این مورد لازم است:
جدول حاوی چندین رکورد است برای مثال:
رکورد اول: فیلد اول 2 و فیلد دوم 0
رکورد دوم: فیلد اول 4 و فیلد دوم 2
رکورد سوم: فیلد اول 3 و فیلد دوم 2
رکورد چهارم: فیلد اول 5 و فیلد دوم 2
رکورد پنجم: فیلد اول 6 و فیلد دوم 5
مقدار دهی شده است.
همانطور که می بینید، فیلد دوم از رکورد پنجم مقدار 5 را دارد که این یعنی به فیلد اول رکورد چهارم مرتبط است و فیلد دوم رکورد چهارم مقدار 2 را دارد و یعنی اینکه این رکورد به فیلد اول رکورد اول مرتبط است.
حالا می خواهیم تعداد زیر مجموعه های فیلد اول از کورد اول را محاسبه کنیم!؟؟؟؟
رضا عربلو
پنج شنبه 23 اسفند 1386, 17:37 عصر
اگر با SQL Server 2005 داری کار می کنی می توانی از CTE Recursion استفاده کنی.
بزرگنترین زیر مجموعه را می توانی بصورت زیر بدست بیاوری :
with
up as
(select Field1,Field2 from Table1 where Field1=2
union all
select e.Field1,e.Field2 from Table1 e join up on up.Field2=e.Field1),
down as
(select Field1,Field2 from Table2 where Field1=2
union all
select e.Field1,e.Field2 from Table1 e join down on e.Field2=down.Field1)
select * from up
union all
select * from down
و به طبع تعداد زیر مجموعه ها برابر است با 2 به توان n.
Hamid_PaK
پنج شنبه 23 اسفند 1386, 19:18 عصر
بله از SQL Server 2005 استفاده می کنم.
و به طبع تعداد زیر مجموعه ها برابر است با 2 به توان n.
من درست متوجه نشدم!!!
توی همون مثالی که زدم زیر مجموعه های 2 می شه 4 تا چون اونایی که فیلد دوم برابر 2 هست که هیچ مشخصه و رکورد پنجم هم که زیر مجموعه رکورد چهارم و در نتیخه باز هم زیر مجوعه 2 قرار خواهد گرفت.
رضا عربلو
پنج شنبه 23 اسفند 1386, 19:35 عصر
شما تعداد زیر مجموعه ها را پرسیده بودید.
برای مثال زیر مجموعه های {1و 2و 3} عبارتند از {} و {1}و {2}و {3}و {1و2}و {1و3}و {2و3}و {1و2و3} که تعدادشون می شود 8 تا.
Hamid_PaK
پنج شنبه 23 اسفند 1386, 20:07 عصر
اما توی مثال شما اطلاعات از دوتا جدول خوانده می شود!!!
ولی توی مثال من جدول تنها یکی است.
در ضمن کوئری که نوشته بودید جواب نداد!!!
یا حق ...
رضا عربلو
پنج شنبه 23 اسفند 1386, 21:30 عصر
اشتباه تایپی است.
Table2 را بکن Table1.
Table1 اسم جدولت است.
Hamid_PaK
جمعه 24 اسفند 1386, 07:13 صبح
جواب داد ولی یه رکورد تکراری که از مجموع دوتا SELECT اولیه داشت تکراری بود و در کل یک رکورد بیشتر نشون می داد که اگر آخرین UNION رو بدون ALL بگذارید تصحیح می شود.
دوتا نکته مهم:
اول من نمی خوام وقتی که گفتم زیر مجموعه های 5 رو بده دیگه خودش که زیر مجموعه 2 بود را محاسبه کنه، البته اینجا بزرگی و کوچکی اعداد اهمیتی ندارد چون در برنامه اصلی این اعداد ID خواهند بود!!!
دوم اینکه این لیست موارد بود چطور تنها تعداد آنها رو محاسبه کنیم !؟؟؟
با تشکر، یا حق ...
رضا عربلو
جمعه 24 اسفند 1386, 11:58 صبح
with
up as
(select Field1,Field2 from Table1 where Field1=2
union all
select e.Field1,e.Field2 from Table1 e join up on up.Field2=e.Field1)
به سمت بالا حرکت می کند.
و
with
down as
(select Field1,Field2 from Table1 where Field1=2
union all
select e.Field1,e.Field2 from Table1 e join down on e.Field2=down.Field1)
به سمت پایین حرکت می کند.
برای بدست آوردن تعداد هم می توانی بنویسی :
with
up as
(select Field1,Field2 from Table1 where Field1=2
union all
select e.Field1,e.Field2 from Table1 e join up on up.Field2=e.Field1),
down as
(select Field1,Field2 from Table2 where Field1=2
union all
select e.Field1,e.Field2 from Table1 e join down on e.Field2=down.Field1)
Select Coutnt(*) FROM (select * from up
union select * from down)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.