ورود

View Full Version : نحوه دستور select برای چارت



Mishtolak
شنبه 17 اردیبهشت 1390, 20:57 عصر
با سلام و احترام
من یک جدول برای چارت دارم به نام chart که فیلد های زیر رو داره و تعداد سطوح اون نامحدود است:
chartId - chartMainId - chartName
فرض کنید رکوردهای زیر تو اون باشه:

اداری - 0 - 1
مالی - 0 - 2
حقوق - 2 - 3
اعتبارات - 2-4
اعتبارات همرانی - 2 - 5

حالا من نیاز دارم لیستی از زکوردهایی رو که بخشی از ChartName اونها اعتبارات هست رو همراه با سطوح بالاترش داشته باشم. که در این مثال میشه رکورد 4 و رکورد 2 و رکورد 5

توضیح : رکوردهای بالا رو جهت روشن شدن مثال گفتم و دستور سلکتی که میخوام باید برای هر تعداد سطحی که کاربر اطلاعات ثبت کرده جواب بده.

قبلا از توجه شما ممنونم

محمد سلیم آبادی
یک شنبه 18 اردیبهشت 1390, 00:18 صبح
سلام،
اگه اسکیول سرورتون 2005 به بالاست که کد زیر جواب میده در غیر اینصورت اگه تمایل داشتین مساله توسط تنها یک کوئری حل بشه باید مشخص کنید که حداکثر سطوح درخت چنتا میشه تا بر اساس اون یک راه حل بنویسم

declare @Sample table
(chartId int,
chartMainId int,
chartName varchar(500));

insert @Sample
values (1, 0, N'اداری'),
(2, 0, N'مالی'),
(3, 2, N'حقوقی'),
(4, 2, N'اعتبارات'),
(5, 2, N'اعتبارات همرانی');

with c as
(select * from @Sample
where chartName like '%' + N'اعتبارات' + '%'

union all

select S.*
from @Sample S join c
on S.chartId = c.chartMainId)

select distinct * from c;