PDA

View Full Version : چندین select به همراه متغیر



ROGHANI
دوشنبه 03 دی 1386, 06:54 صبح
باسلام
میخواهم روی اطلاعات چند جدول فیلتری انجام دهم که لازم است برای اینکار چندین دستور select تودرتو بنویسم و لازم است بگویم که در فیلترهای اول از متغیر استفاده نموده ام.
برای متغیر که از view نمیتوان استفاده نمود. اگر از فانکشن استفاده کنم از نتیجه فانکشنی که متغیر دارد باز نمیتوان استفاده کرد. از نتیجه یک sp در sp بعدی هم نمیتوان استفاده کرد. پس ظاهرا باید تمام دستورات را در یک sp بنویسم. من از select into استفاده کردم و نتیجه هر select رو در یک table مجازی ریختم و در دستورات بعد از آن استفاده کردم . و در پایان تیبلها رو حذف نمودم . اما ظاهرا به دلیل چندین select هیچ خروجی ندارم .ممکن است راهنمایی بفرمایید.

حمیدرضاصادقیان
دوشنبه 03 دی 1386, 09:15 صبح
اگر امکان داره یک نمونه از دیتا رو در اینجا قرار بده و فیلتری که میخوای روش قرار بدی اینجا بنویس شاید بشه بهتر کمک کرد شایدم نیاز به چند select نباشه.

ROGHANI
دوشنبه 03 دی 1386, 15:43 عصر
بعنوان مثال تعداد رکوردهای این select را میخواهم
SELECT Wnameh.be, Wnameh.khande, [Wrunevesht-filter].runevesht, [Wrunevesht-filter].khande1
FROM Wnameh LEFT JOIN [Wrunevesht-filter] ON Wnameh.ID = [Wrunevesht-filter].id
WHERE (((Wnameh.be)=@ghesmat) AND ((Wnameh.khande)=0)) OR ((([Wrunevesht-filter].runevesht)=@ghesmat) AND (([Wrunevesht-filter].khande1)=0));
به همراه تعداد رکوردهای یک select دیگر هر دو در یک sp

reza_rad
دوشنبه 03 دی 1386, 16:45 عصر
اینطوری بنویسید:


select count(*) from
(
SELECT Wnameh.be, Wnameh.khande, [Wrunevesht-filter].runevesht, [Wrunevesht-filter].khande1
FROM Wnameh LEFT JOIN [Wrunevesht-filter] ON Wnameh.ID = [Wrunevesht-filter].id
WHERE (((Wnameh.be)=@ghesmat) AND ((Wnameh.khande)=0)) OR ((([Wrunevesht-filter].runevesht)=@ghesmat) AND (([Wrunevesht-filter].khande1)=0))
)a

ROGHANI
سه شنبه 04 دی 1386, 10:45 صبح
اینطوری بنویسید:


select count(*) from
(
SELECT Wnameh.be, Wnameh.khande, [Wrunevesht-filter].runevesht, [Wrunevesht-filter].khande1
FROM Wnameh LEFT JOIN [Wrunevesht-filter] ON Wnameh.ID = [Wrunevesht-filter].id
WHERE (((Wnameh.be)=@ghesmat) AND ((Wnameh.khande)=0)) OR ((([Wrunevesht-filter].runevesht)=@ghesmat) AND (([Wrunevesht-filter].khande1)=0))
)a

با تشکر از لطف شما
اگه مجموع رکوردهای یک select‌دیگه هم بخوام بعنوان خروجی همین sp بیاد چکار کنم. ایا با نوشتن یک دستور select دیگه مشابه دستور شما زیر select اول sp دو خروجی را میدهد.با تشکر

reza_rad
سه شنبه 04 دی 1386, 10:59 صبح
اگه مجموع رکوردهای یک select‌دیگه هم بخوام بعنوان خروجی همین sp بیاد چکار کنم. ایا با نوشتن یک دستور select دیگه مشابه دستور شما زیر select اول sp دو خروجی را میدهد
شمامیتونی سلکت بعدی رو بعد از یک union توی همین sp بنویسی که نتیجه ای که برمی گردونه به این صورت خواهد بود که یک ستون هست با دوسطر
سطراول تعدادستونهای سلکت اول
سطردوم تعدادستونهای سلکت دوم

ROGHANI
سه شنبه 04 دی 1386, 11:25 صبح
ممنونم از شما
اجازه بدید یه سوال دیگه بپرسم
در دستور زیر نتیجه یک QUERY رو در یک تیبل مجازی میریزم به نام Wruneveshtfilter و بعد در دستور SELECT دوم از آن استفاده میکنم.
ALTER PROCEDURE dbo.WQUERY35(@fopen1ghesmat nvarchar(50))

AS SELECT Wrunevesht.id, Wrunevesht.runevesht, Wrunevesht.id1, Wrunevesht.khande1
INTO Wruneveshtfilter
FROM Wrunevesht
WHERE (((Wrunevesht.runevesht) = @fopen1ghesmat))
SELECT dbo.Wnameh.ID, dbo.Wnameh.codeprojeh, dbo.Wnameh.az, dbo.Wnameh.be, dbo.Wnameh.mozu, dbo.Wnameh.sharh,
dbo.Wnameh.tarikh, dbo.Wnameh.tahiye, dbo.Wnameh.khande, dbo.[Wruneveshtfilter].runevesht, dbo.[Wruneveshtfilter].khande1
FROM dbo.Wnameh LEFT OUTER JOIN
dbo.[Wruneveshtfilter] ON dbo.Wnameh.ID = dbo.[Wruneveshtfilter].id
WHERE (dbo.Wnameh.be = @fopen1ghesmat) AND (dbo.Wnameh.khande = 0) OR
(dbo.[Wruneveshtfilter].runevesht = @fopen1ghesmat) AND (dbo.[Wruneveshtfilter].khande1 = 0)
ORDER BY dbo.Wnameh.ID
آیا میشود از دستور SELECT دوم تنها خروجی گرفت
با تشکر

reza_rad
سه شنبه 04 دی 1386, 12:04 عصر
دوست عزیز کدتون رودرتگ کد قرار بدید
البته که میشه از سلکت دوم خروجی گرفت.
اما روال شما برای استفاده از جدول مجازی درست نیست.
ضمن اینکه شما بدون استفاده از جدول دومی هم می تونید به خروجی مورد نظر برسید.
ولی در کل برای کار با جدول تمپ به این لینک نگاه کنید:
http://www.sqlteam.com/article/temporary-tables

ROGHANI
سه شنبه 04 دی 1386, 13:07 عصر
ALTER PROCEDURE dbo.WQUERY35
(@fopen1ghesmat nvarchar(50))
AS SELECT Wrunevesht.id, Wrunevesht.runevesht, Wrunevesht.id1, Wrunevesht.khande1
INTO Wruneveshtfilter
FROM Wrunevesht
WHERE (((Wrunevesht.runevesht) = @fopen1ghesmat))
SELECT dbo.Wnameh.ID, dbo.Wnameh.codeprojeh, dbo.Wnameh.az, dbo.Wnameh.be, dbo.Wnameh.mozu, dbo.Wnameh.sharh,
dbo.Wnameh.tarikh, dbo.Wnameh.tahiye, dbo.Wnameh.khande, dbo.[Wruneveshtfilter].runevesht, dbo.[Wruneveshtfilter].khande1
FROM dbo.Wnameh LEFT OUTER JOIN
dbo.[Wruneveshtfilter] ON dbo.Wnameh.ID = dbo.[Wruneveshtfilter].id
WHERE (dbo.Wnameh.be = @fopen1ghesmat) AND (dbo.Wnameh.khande = 0) OR
(dbo.[Wruneveshtfilter].runevesht = @fopen1ghesmat) AND (dbo.[Wruneveshtfilter].khande1 = 0)
ORDER BY dbo.Wnameh.ID


با تشکر فراوان از شما جناب آقای راد