PDA

View Full Version : خطا در یک کوری و ویو



arefba
دوشنبه 08 فروردین 1390, 04:42 صبح
بسم الله الرحمن الرحیم
سلام
دوستان این کوری رو یکی از بچه ها لطف کرد


select id,sharh,bedehkar,bestankar,-(bestankar - bedehkar) as mandebedehkar,0 as mandebestankar
from tablename
where bestankar-bedehkar<0
union
select id,sharh,bedehkar,bestankar,0 as mandebedehkar,bestankar - bedehkar as mandebestankar
from tablename
where bestankar-bedehkar>0

من اینجا ستون مانده بدهکار و مانده بستانکار تو بانکم ندارم
ولی ایشون اینطور فکر کردن
مسئله اصلیم اینه



بسم الله الرحمن الرحیم
با درود

دوستان من چهارتا فیلد رو توی یه دیتا ست فراخوانی کردم که اسمشون به ترتیب
آیدی -- شرح -- بدهکار -- بستانکار
می باشد



من می خوام که در گرید قسمت های مانده بدهکار و مانده بستانکارم ، بدهکار از بستانکار کم بشه اگه مثبت عددش توی مانده بدهکار نوشته شه و اگر منفی بود عددش توی مانده بستانکار این دو ستون رو می خوام با محاسبه بدست بیارم و در دیتا بیسم موجود نیستن

چطور می تونم اینکار رو انجام بدم
ممنون

arefba
دوشنبه 08 فروردین 1390, 14:56 عصر
لطفا جواب بدید
آیا راهی هست

Rejnev
دوشنبه 08 فروردین 1390, 15:25 عصر
باید از جداولی که داری به این صورت یک ویو بسازی و از ویو (به فرض تحت عنوان tableName) کوئری بالا رو بگیری:

create view tableName as
select
tarikh[tarikh],
sharh[sharh],
0 ,
price[bedehkar]
from [B]pardakhtTable
union all
select
tarikh[tarikh],
sharh[sharh],
price,
0 [bedehkar]
from [B]daryaftTable
union all...

arefba
دوشنبه 08 فروردین 1390, 16:02 عصر
ممنون اما با ساخت ویویی برای اینکار مشکل ندارم
مشکلم اینه که من اینا رو که سلکت کنم و بندازم توی یک گرید همون چهارتا فیلد خودم رو نشون میده و مانده بدهکار و بستانکار رو که لازم دارم نمایش نمیده
دستوری تو اس کیو ال هست که بعد از کسر دوتا فیلد نتیجش رو برای نمایش بزاره تو فیلد هایی که اصلا در بانک وجود ندارند و فقط برای نمایش تو گرید باشه ؟؟

Rejnev
دوشنبه 08 فروردین 1390, 18:18 عصر
فرض کن دو جدول زیر رو داریم:

tblPardakht
{
id,
date,
price,
note,
personID
}
tblDaryaft
{
id,
date,
price,
note,
personID
}

حالا میخوایم خروجی زیر رو بگیریم:


67991
به این صورت عمل میکنیم:

create proc bedBes @personID int as
begin
select
id,
date,
note,
price[bedehkar],
0[bestankar],
''[shakhsiat],
0[mande]
from tblPardakht
where personID=@personID
union all
select
id,
date,
note,
0[bedehkar],
price[bestankar],
''[shakhsiat],
0[mande]
from tblDaryaft
where personID=@personID
order by date
end

بعد نتیجه رو از sql میگیری.
دقت داری که مانده و شخصیت خالیه! برای پر کردن و مقدار دادن به اون باید بعد از این که اطلاعات رو خوندی، با یک حلقه for ساده، شخصیت و مانده رو محاسبه کنی.

arefba
دوشنبه 08 فروردین 1390, 19:33 عصر
ممنون از پاسختون
یه سوال دیگه
من کد زیر رو که می نویسم صحیح در میاد

"Select IDgroup,SUM(Bedehkar) , SUM(Bestankar) From View_1 Group by IDgroup
اما من می خوام که فیلد های دیگه مثل فیلد های زیر رو هم نمایش بده بدونه اینکه عملی روشون انجام بده
IDkool
text ,...

اما متاسفانه این کار رو نمی کنه
و میگه تو بر اساس یه چیز دیگه گروه بندی کردی
میشه راهنمایی کنید

Rejnev
دوشنبه 08 فروردین 1390, 21:13 عصر
بر اساس اونها هم باید گروه بندی کنید (group by idKol,text,...)

arefba
دوشنبه 08 فروردین 1390, 22:35 عصر
من یه ان ور چر تو بانک دارم می خوام همه اونایی که آیدی گروپ یکسانی دارند رو با هم جمع بزنم و یکجا نشون بدم
با sum(text) نمیشه
باچی باید اینکار رو کنم

Rejnev
دوشنبه 08 فروردین 1390, 23:00 عصر
یا میتونی بیاری سمت کلاینت و اونجا تبدیل کنی یا:

select sum(convert(bigint, colVarchar)) from tbl

در ضمن:
1- اگه شما school رو اسچول میخونید، nvarChar هم ان ور چر است!!! (لااقل انگلیسی تایپ میکردید که نیم ساعت به مانیتور خیره نشم که چی نوشتی!)
char مخفف character (کراکتر) است و 'کر' خونده میشه نه 'چر'! (چیزی به نام چراکتر نداریم)
2- لطفا این سوالات رو سرچ کنید.(همون کاری که خود من می کنم)