ورود

View Full Version : مشکل با دستور IIF سیکوال، در BDE دلفی



FiACKER
سه شنبه 18 خرداد 1389, 09:07 صبح
سلام الیکم و رحمت الله برادرا

ببخشید دوستان، من می خواستم با استفاده از BDE به یک بانک فاکس پرو وصل شم و یک کوری رو روش اجرا کنم. من این کوری رو از یک فایل PRG فاکس پرو به SQLه BDE تبدیل کردم و فقط با یک فیلد مشکل داشتم.

در واقع تویه SELECT برای پردازش یکی از فیلد ها از دستور IIF استفاده شده که من نتونستم جایگزینی براش پیدا کنم. ببینید :



SELECT
( 100 * sum(fld_21) / count(*) ) as vsl_pr
,sum(fld_21) as vossum
,sum(IIF(fld_21=0, 0, 1)) as vosct
,MAX(tar_ms) as last_p
,MIN( tar_ms ) as first_p
,count(*) as bict
,skl
FROM DB.DBF AS D

حسین شهریاری
سه شنبه 18 خرداد 1389, 09:22 صبح
سلام

شما باید معادل این دستور توی SQL استاندارد که بین تمام DBMS ها مشترک هست را پیا کنی و جایگزینش کنی.

FiACKER
سه شنبه 18 خرداد 1389, 10:49 صبح
راستش نمی دونم معادلش چیه.
اول اومدم تویه WHERE معادل اینو گذاشتم، اما اگه دقت کنید، در این خط :

,sum(fld_21) as vossum
,sum(IIF(fld_21=0, 0, 1)) as vosct
نتیجه ی vossum و vosct با هم یکی میشه.

اینو گذاشتم :

WHERE
fld_21 <> 0



ولی مشکل حل نشد

آیا ایده ی دیگه ای دارید ؟

حسین شهریاری
سه شنبه 18 خرداد 1389, 11:54 صبح
از ساختار Case استفاده کنین.البته اگه از SqlServer استفاده میکنین!!

select Sum(Case fld_21
When 0 then 0
Else 1
End) asYourName

FiACKER
چهارشنبه 19 خرداد 1389, 09:38 صبح
سلام
ممنون از نظرتون اما همنطور که گفتم بانک فاکس پرو هست(DBF) و امکان تبدیل اطلاعات به Sql Sever نیست چون می خوام یه گزارش بگیرم که فقط و فقط سرعت مهمه!
اگه بخوام اول تبدیل اطلاعات رو انجام بدم حداقل نیم ساعت طول میکشه چون تعداد رکوردها زیاده و بانک هم در شبکه هست و از همه بدتر اینکه سرعت سیستمایه ما eggy (!!) هست :گیج: