PDA

View Full Version : بازیابی داده های پدر - فرزندی



shekoofeh
جمعه 09 مرداد 1388, 14:08 عصر
سلام.
دو جدول با مشخصات زیر رو در نظر بگیرید:

مرکز:
ID مرکز
نام مرکز
نام رئیس

کاربر:
ID کاربر
ID مرکز
نام کاربر

هر مرکز از چندین کاربر تشکیل شده.

سوال: دستور SQL برای بازیابی داده ها رو به چه شکل بنویسم تا هر مرکز و کاربران مرتبط با اون بازیابی بشن.

توضیح: برنامه رو شی گرا نوشتم. بدین شکل که هر جدول یک کلاس مرتبط با خودش داره. کلاس کاربر، یک Property از کلاس مرکز داره.

پیشاپیش از راهنماییتون ممنونم.

محمد سلیم آبادی
جمعه 09 مرداد 1388, 16:00 عصر
سلام.
در واقع جدول مراکز با جدول کاربران یک ارتباط 1 به N دارد.

اگر می خواهید نتیجه زیر را از جداولتان بگیرید کافی است که دو جدول را با یکدیگر INNER JOIN کرده




نام کاربر نام مرکز
کاربر 1 مرکز 1
کاربر 2 مرکز 1
کاربر 3 مرکز 1
کاربر 4 مرکز 2
کاربر 5 مرکز 2


ولی اگر می خواهید نتیجه کوئری به شکل زیر در بیاید باید از UDF (توابع سفارشی کاربر)
استفاده کنید.





لیست کاربران نام مرکز
کاربر 1و کاربر 2و کاربر3 مرکز 1
کاربر 4و کاربر 5 مرکز 2

shekoofeh
جمعه 09 مرداد 1388, 16:37 عصر
اگر می خواهید نتیجه کوئری به شکل زیر در بیاید باید از UDF (توابع سفارشی کاربر)
استفاده کنید.

حالت Hierachical مد نظر هست.
کدهای مرتبط با UDF رو لطف می کنید؟

محمد سلیم آبادی
جمعه 09 مرداد 1388, 18:37 عصر
باید یک تابع بسازید و یکی از این دو کوئری را در آن قرار دهید و نام مرکز را به عنوان پارامتر ورودی به تابع ارسال کرده و مقدار متغیر ای را که تعریف کردید و با query مقدار دهی کردید را به عنوان خروجی تابع return کنید.


-- First Method
DECLARE @a NVARCHAR(2000)
SET @a=''
SELECT @a= CASE WHEN @a='' THEN @a+boatname
WHEN boatname IS NULL THEN @a
ELSE @a+', '+boatname
END
FROM boats


-- Second Method
DECLARE @a NVARCHAR(2000)
set @a=null
select @a=CASE
WHEN boatname IS NOT NULL
then COALESCE(@a + ', ', '') + boatname
else COALESCE(@a + '', '')
end
from boats



اطلاعات بیشتر:
http://www.barnamenevis.org/forum/showthread.php?t=168331