PDA

View Full Version : استفاده از if در قسمت where



armangara
سه شنبه 17 شهریور 1388, 10:29 صبح
سلام
من يه stored prosedureدارم كه ميخوام تو قسمت where اون يه عبارت if else بزارم اما رو if
خطا ميده ميخوام ببينم اصلا ميشه اونجا if ya case گذاشت يا نه؟
where
--e.crt=case @dahande when 1 then 1 end
--e.deb is not null
--andhvl
(edate >=@Oxdate or @Oxdate is null ) and ( edate <=@Oydate or @Oydate is null ) and gpidref = isnull(@g,gpidref)
and ( edate >=@Dxdate or @Dxdate is null ) and ( edate <=@Dydate or @Dydate is null )
and klidref = isnull(@k,klidref)
and isnull(mnidref,'') = isnull(@m,isnull(mnidref,''))
and isnull(tfidref,'') = isnull(@t,isnull(tfidref,''))
and cheqAcc.idcheq=@idcheq and
if @girande
e.deb is not null
else if @dahande
begin
e.crt is not null
end

محمد سلیم آبادی
سه شنبه 17 شهریور 1388, 11:04 صبح
if @girande
e.deb is not null
else if @dahande
begin
e.crt is not null
end

هدف ات از کد فوق چیست؟ معنایی ندارد!
در این مواقع اگر در شرایط مختلف می خواهید یک مقدار را انتخاب کنید باید از تابع Case استفاده کنید.

armangara
سه شنبه 17 شهریور 1388, 11:17 صبح
ميخوام بر اساس پارامتر فيلتر بشه
اگه پارامتر اولي برقرار بود كه اونايي رو برگردونه كه فيلد deb مخالف null باشه

محمد سلیم آبادی
سه شنبه 17 شهریور 1388, 11:28 صبح
با این تصور که با Subquery و Case موفق شدید سطرهایی را برگردانید که مورد نظر خودتان است، بعد؟ عبارت where نیاز به یک شرط دارد. من عبارت شرطی ای در قسمت آخر نمی بینم!

armangara
سه شنبه 17 شهریور 1388, 11:36 صبح
e.deb is not null
اين شرطيه كه بايد اجرا بشه

محمد سلیم آبادی
سه شنبه 17 شهریور 1388, 11:48 صبح
می خواهی ابتدا اگر مقدار متغیر grande مخالف null بود بیایید دوباره در صورتی که مقدار ستون e.deb نیز مخالف null بود آن را انتخاب کنید. و در غیر این صورت (grande برابر null) بود اگر متغیر dahande مخالف null بود بیایید مقدار e.crt را انتخاب کنید و در نهایت مقدار بدست آمده را با عبارت IS NOT NULL تبدیل به Consition کنید؟
اگر اینگونه باشد کد به چیزی شبیه به کد زیر احتیاج دارید:



where
(case when @girande is not null then
case when e.deb is not null then e.ded end
when @dahande is not null then
case when e.crt is not null then e.crt end
end) is not null --Condition

armangara
سه شنبه 17 شهریور 1388, 12:31 عصر
واقعا ممنونم مشكلم حل شد