PDA

View Full Version : مشکل در Query



happy65_sh
چهارشنبه 06 آبان 1388, 09:10 صبح
سلام به برنامه نويساي عزيز
دوستان عزيز من مي خواستم يه كوئري بنويسم به شكل زير:

select a*(b)
مشكل اينه كه مقدار b ثابت نيست يعني يه دستور شرطي ميشه به صورت زير:



اگر c مقدار دارد b=c وگرنه اگر d مقدار دارد b=d وگرنه b=0

در ضمن c و d فيلدهايي از جداول جداگانه هستند.
انشاء الله كه واضح و روشنه:گیج:
حالا من چه طوري بايد همچون كوئري را پياده سازي كنم؟؟:متفکر:

محمد سلیم آبادی
چهارشنبه 06 آبان 1388, 11:00 صبح
سلام،
اگر همزمان دو فیلد c و d مقدار داشته باشند b چه مقداری را خواهد گرفت (c؟)


declare @c int,
@d int

select @c=1
, @d=2

select case
when @c is not null then @c
when @d is not null then @d
else 0
end



در ضمن c و d فيلدهايي از جداول جداگانه هستند.

مقادیر c و d با استفاده از scalar subquery بدست می آیند؟
مثلا
select c=(select max(i) from table), d= (select id from table where etc

happy65_sh
چهارشنبه 06 آبان 1388, 11:29 صبح
سلام
شروطي را در برنامه گذاشته ام كه c و d همزمان مقدار ندارنديا يكي يا هيچكدوم..
خيلي ممنون كارم راه افتاد c و d هم همين جا مقدار دهي كردم با يك select ديگه:


declare @c int,
@d int

select @c=(select max(i) from table)
, @d=((select id from table where etc)

select case
when @c is not null then @c
when @d is not null then @d
else 0
end

happy65_sh
چهارشنبه 06 آبان 1388, 13:24 عصر
دوست عزيز
حالا مي خواهم كه اين كوئري را در يك تابع بنويسم به صورت زير نوشته ام اما خطا ميده:


create function mablagh() returns int
begin
declare @c int,@d int,@ret int
set @c=(select max(i) from table),
@d=((select id from table where etc)
select case
when @c is not null then set @ret=@c
when @d is not null then set @ret=@d
else set @ret=0
return @ret
end

خطاش هم اينه:

incorrect syntax near 'set'
و

incorrect syntax near 'when'
در واقع نميدونم چه جوري بايد مقدار بازگشتي را مقدار دهي كنم؟

محمد سلیم آبادی
چهارشنبه 06 آبان 1388, 14:32 عصر
تفاوت case با if این است که case قابلیت این را دارد که در یک عبارت SELECT نیز استفاده شود.
در این مورد شما هم می توانید از if استفاده کنید و هم case.


select @ret=case
when @c is not null then @c
when @d is not null then @d
else 0
end
--- OR ---

If @c is not null
set @ret = @c
else if @d is not null
set @ret = @d
else
set @ret = 0


خود تعریف تابع هم یک as بعد از returns کم دارد.