PDA

View Full Version : ايجاد دستور SQL مشابه فايل پيوستي ACCESS



tolid123456789
سه شنبه 05 آذر 1392, 17:38 عصر
سلام من فايلي رو در اكسس درست كردم كه پيوستش كردم.
اگر بخوام اين كار رو در SQL انجام بدم چه كار بايد بكنم
در فايل اكسس يك جدول دارم
يكبار Query ازش گرفتم با پارامتر
يك Query ديگه درست كردم كه از Query اول استفاده مي كنه و زماني كه Query دوم رو اجرا مي كنم باز هم پارامتر معرفي شده در Query اول پرسيده ميشه و گزارش رو نمايش ميده.
هدف من اينه كه تاثير فيلد ي كه پارامتر براش تعريف كردم رو در Query دوم از بين ببرم.
* براي حل اين مشكل خواستم از دو view در sql استفاده كنم ولي view در sql پارامتر نميگره.
* خواستم از dataset vb.net استفاده كنم و يك جدول به صورت ويزاردي بسازم (به جاي Query اولم) و از اين جدول جدول دوم (به جاي Query دومم) رو بسازم ولي جواب نميده.

لطفا كمك كنيد.

فايل اكسس پيوستي
113250

محمد سلیم آبادی
پنج شنبه 07 آذر 1392, 09:24 صبح
اگر میخواهید یک Query پارامتریک داشته باشه می تونید از ویژگی Table Valued Function یا به اختصار TVF بهره ببرید.
همانند سایر اشیاء مثل جدول و ویو میتوانید نام این تابع را جلوی FROM بیاورید و با سایر جداول JOIN کنید.

ضمنا شما میتونید کوئری خود را به صورت تودرتو بنویسید و نیازی به ساخت چند کوئری مستقل نیست (در اینجا منظور از کوئری، کوئری نام گذاری شده ایست که به عنوان ویو شناخته می شود).

tolid123456789
پنج شنبه 07 آذر 1392, 14:49 عصر
سلام از جوابتون ممنون
امکان داره مثالی رو در sql ارائه بدید؟
با هم ممنونم از جوابتون

محمد سلیم آبادی
جمعه 08 آذر 1392, 10:25 صبح
برای آشنایی و ساخت یک table valued user defined function این دو صفحه را پیشنهاد میکنم:
http://www.codeproject.com/Articles/167399/
http://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx

اما راجب کوئری های تو در تو. nested بودن کوئری ها تنها محدود به قسمت هایی چون where و یا select نمی شود بلکه شما میتوانید یک کوئری تو در تو در جلوی from داشته باشید، مثال:

SELECT ...
FROM (SELECT ... FROM... ) AS D;

و مطلبی که قابل ذکر هست اینه که این تو در تو بودن به یک سطح محدود نیست، پس تعجب نکنید اگر کوئری زیر اجرا شد:


SELECT ...
FROM (SELECT ... FROM (SELECT ... FROM ... ) AS D) AS T


و به عنوان مطلب پایانی، اگر قرار هست به یک query نام گذاری شده (عبارت جدولی همانند چیزی که در مثال فوق آوردم که به derived table شناخته می شود) در کوئری اصلی بارها ارجاع داده شود و از آن به عنوان source استفاده شود بهتر است که از چیزی به نام Common Table Expression استفاده کنید.

tolid123456789
جمعه 08 آذر 1392, 21:44 عصر
سلام
ممنون از توجهتون و جوابتون.
میشه کد sql مشابه access پیوستی رو بنویسید؟
من شرمندم ولی اگه میشد کد sql مشابه access رو بنویسید ممنون می شدم و ان شا ا... مشکل من هم حل میشد.

fakhravari
جمعه 08 آذر 1392, 22:53 عصر
با یک PROCEDURE هم می تونید کار کنید

محمد سلیم آبادی
جمعه 08 آذر 1392, 23:19 عصر
سلام
ممنون از توجهتون و جوابتون.
میشه کد sql مشابه access پیوستی رو بنویسید؟
من شرمندم ولی اگه میشد کد sql مشابه access رو بنویسید ممنون می شدم و ان شا ا... مشکل من هم حل میشد.

کد کوئری یا کوئری هایی که در فایل پیوستی هست را در تگ کد قرار بدین تا بررسی شود.

tolid123456789
شنبه 09 آذر 1392, 08:38 صبح
سلام
جدول داراي فيلدهاي زير هست:
amel_code+amani_code+kala_code+qty
كوئري اول:

SELECT Table1.amel_code, Table1.amani_code, Table1.kala_code, Sum(Table1.qty) AS SumOfqty
FROM Table1
GROUP BY Table1.amel_code, Table1.amani_code, Table1.kala_code
HAVING (((Table1.amel_code)=[?]) AND ((Table1.amani_code)<[?]));

كوئري دوم و خروجي كه مي خوام در vb.net ازش استفاده كنم:

SELECT [Table1 Query].[amel_code], [Table1 Query].[kala_code], Sum([Table1 Query].[SumOfqty]) AS SumOfSumOfqty
FROM [Table1 Query]
GROUP BY [Table1 Query].[amel_code], [Table1 Query].[kala_code];

اين جدول و دو كوئري بود كه در Access درست كردم.
حالا همين جدول رو مي خوام در SQL طراحي كنم و از كوئري دوم در فرم خاصي استفاده كنم.
از اينكه پيگير اين مسئله شديد ممنونم.
منتظر پاسخ هاتون هستم.

tolid123456789
شنبه 09 آذر 1392, 10:55 صبح
سلام
با كمك شما دوستان 50% مشكل حل شد من از دستور select تودرتو استفاده كردم و خروجي كوئري دوم رو تونستم در sql بسازم

SELECT [Table1 Query].[amel_code], [Table1 Query].[kala_code], Sum([Table1 Query].[SumOfqty]) AS SumOfSumOfqty
FROM(SELECT Table1.amel_code, Table1.amani_code, Table1.kala_code, Sum(Table1.qty) AS SumOfqty
FROM Table1
GROUP BY Table1.amel_code, Table1.amani_code, Table1.kala_code
HAVING (((Table1.amel_code)=[?]) AND ((Table1.amani_code)<[?]));)
GROUP BY [Table1 Query].[amel_code], [Table1 Query].[kala_code];

اما الان كه دستور رو در vb.net قرار مي دم به syntax پرانتز بعد از from ايراد مي گيره(من در قسمت from توي يك پرانتز باز و بسته كوئري اول رو قرار دادم در اس كيو ال error نداد ولي در vb.net در زمان اجرا اين خطا رو ميده:

Incorrect syntax near the keyword 'SELECT'.
Incorrect syntax near ')'.

اگر هم پرانتز باز بسته رو حذف كنم اين خطا رو ميده:

Incorrect syntax near the keyword 'SELECT'.
Incorrect syntax near the keyword 'AS'.

لطفا كمك كنيد.

tolid123456789
شنبه 09 آذر 1392, 12:09 عصر
سلام دوستان مشكل ظاهرا به صورت 100% حل شد.
من در پرانتز ها اشتباه كرده بودم.
ممنون از راهنمايي كاملتون.
ممنون
ممنون