PDA

View Full Version : سوال: چرا کوئری Sum من عمل تفکیک را به درستی انجام نمیدهد ؟



rayson
چهارشنبه 22 آبان 1392, 14:58 عصر
سلام دوستان.
کد من اعداد را بر اساس گروه و مدرک جدا کرده ( مجموع گیری ) و جدول مجاز - جدول کارکرد میکند .

مقدار که وارد میکنم برای سنتی و فلزی و ساخته شده (بر اساس گروه و مدرک) بعد از عمل تفریق عدد متفاوتی به دست میاد.
من الان 1 ماه هست که گیر این بخش هستم که آخرین بخش برنامه من هست هر کار میکنم نمیتونم کد مناسبی بنویسم براش ، چندین بار هم دوستان زحمت کشیدن کمک کردن ولی باز هم درست نشد .
کد من:
SqlDataAdapter da2 = new SqlDataAdapter("select sum(B1.T1) as totalsonati,sum(B1.T2) as totalfelezi,sum(B1.T3) as totalsakhteshode from(select sum(tbl_mojaz.sonati) as T1,sum(tbl_mojaz.felezi) as T2,sum(tbl_mojaz.sakhteshode) as T3 from tbl_mojaz where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%' group by tbl_mojaz.id_madrak_tahsili,tbl_mojaz.id_group union select -sum(tbl_karkard.sonati) as T1,-sum(tbl_karkard.felezi) as T2,-sum(tbl_karkard.sakhteshode) as T3 from tbl_karkard where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%' group by tbl_karkard.id_madrak_tahsili,tbl_karkard.id_group )B1 ", con2);

دوستان جدول های من به شکل زیر هستند.
خداییش اگر کسی میتونه یک روش جدید به کار ببره که من بتونم بر اساس گروه و مدرک تحصیلی، مانده فیلد های سنتی ، فلزی ، ساخته شده را در بیاورم .
فرمول مقادیر من به شکل زیر :
مانده سنتی = کل فیلد مجاز سنتی از جدول مجاز - کل کارکرد سنتی از جدول کارکرد
مانده فلزی =کل مجاز فلزی از جدول مجاز - کل کازکرد فلزی از جدول کارکرد
مانده ساخته شده = کل مجاز ساخته شده از جدول مجاز - کل کارکرد ساخته شده از جدول کارکرد
گروه = نام گروه از جدول گروه
مدرک تحصیلی = نام مدرک تحصیلی از جدول مدرک تحصیلی
مانند:
سنتی = 150 فلزی = 200 ساحته شده=100 گروه= نظارت مدرک تحصیلی= معماری
لطفا راهنمایی کنید .
با تشکر

rahnema1
چهارشنبه 22 آبان 1392, 23:26 عصر
ببینید این جواب میده؟


select B1.T1+B1.T11 as totalsonati,B1.T2+B1.T22 as totalfelezi,B1.T3+B1.T33 as totalsakhteshode
from
(select * from
(select id_madrak_tahsili,id_group,sum(tbl_mojaz.sonati) as T1,sum(tbl_mojaz.felezi) as T2,sum(tbl_mojaz.sakhteshode) as T3
from tbl_mojaz
where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%'
groupby tbl_mojaz.id_madrak_tahsili,tbl_mojaz.id_group ) as s1
leftjoin
(select id_madrak_tahsili,id_group,-sum(tbl_karkard.sonati) as T11,-sum(tbl_karkard.felezi) as T22,-sum(tbl_karkard.sakhteshode) as T33 from tbl_karkard
where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%'
groupby tbl_karkard.id_madrak_tahsili,tbl_karkard.id_group ) as s2
ON (s1.id_madrak_tahsili = s2.id_madrak_tahsili
AND s1.id_group = s2.id_group)
) as B1

rahnema1
پنج شنبه 23 آبان 1392, 00:18 صبح
اگه اسم ها رو هم بخواهی فکر کنم اینجوری بشه


select B4.name_madrak as name_madrak, B4.group_name as group_name,B4.T1+B4.T11 as totalsonati,B4.T2+B4.T22 as totalfelezi,B4.T3+B4.T33 as totalsakhteshode
from
((select * from
(select B1.id_madrak_tahsili as id_madrak_tahsili, B1.id_group as id_group,B1.T1+B1.T11 as totalsonati,B1.T2+B1.T22 as totalfelezi,B1.T3+B1.T33 as totalsakhteshode
from
(select * from
(select id_madrak_tahsili,id_group,sum(tbl_mojaz.sonati) as T1,sum(tbl_mojaz.felezi) as T2,sum(tbl_mojaz.sakhteshode) as T3
from tbl_mojaz
where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%'
groupby tbl_mojaz.id_madrak_tahsili,tbl_mojaz.id_group ) as s1
leftjoin
(select id_madrak_tahsili,id_group,-sum(tbl_karkard.sonati) as T11,-sum(tbl_karkard.felezi) as T22,-sum(tbl_karkard.sakhteshode) as T33 from tbl_karkard
where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%'
groupby tbl_karkard.id_madrak_tahsili,tbl_karkard.id_group ) as s2
ON (s1.id_madrak_tahsili = s2.id_madrak_tahsili
AND s1.id_group = s2.id_group)
) as B1
) as B2
leftjoin
groups
ON (B2.id_group=groups.id_group)) as B3
leftjoin
madrak_tahsili
ON (B3.id_madrak_tahsili=madrak_tahsili.id_madrak_tah sili)) as B4

rayson
پنج شنبه 23 آبان 1392, 14:10 عصر
سلام.
خیلی ممنون واقعا لطف کردید.
من کد جایگزین میکنم اما خطای سینتکس میده ، از دیشب تا به الان دارم چک میکنم تکه به تکه کد را ولی اصلا نمیتونم تشخیص بدم که چرا خطا میده ،
از آخر کد as آخر خطا میگیره وقتی حذفش هم میکنم باز هم جواب نمیده .
کد هم که تو برنامه من کپی کردم به شکل زیر است:
SqlDataAdapter da2 = new SqlDataAdapter("select B4.name_madrak as name_madrak, B4.group_name as group_name,B4.T1+B4.T11 as totalsonati,B4.T2+B4.T22 as totalfelezi,B4.T3+B4.T33 as totalsakhteshode from((select * from (select B1.id_madrak_tahsili as id_madrak_tahsili, B1.id_group as id_group,B1.T1+B1.T11 as totalsonati,B1.T2+B1.T22 as totalfelezi,B1.T3+B1.T33 as totalsakhteshode from (select * from (select id_madrak_tahsili,id_group,sum(tbl_mojaz.sonati) as T1,sum(tbl_mojaz.felezi) as T2,sum(tbl_mojaz.sakhteshode) as T3 from tbl_mojaz where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%' group by tbl_mojaz.id_madrak_tahsili,tbl_mojaz.id_group ) as s1 left join (select id_madrak_tahsili,id_group,-sum(tbl_karkard.sonati) as T11,-sum(tbl_karkard.felezi) as T22,-sum(tbl_karkard.sakhteshode) as T33 from tbl_karkard where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%' group by tbl_karkard.id_madrak_tahsili,tbl_karkard.id_group ) as s2 ON (s1.id_madrak_tahsili = s2.id_madrak_tahsili AND s1.id_group = s2.id_group)) as B1) as B2 left join groups ON (B2.id_group=groups.id_group)) as B3 left join madrak_tahsili ON (B3.id_madrak_tahsili=madrak_tahsili.id_madrak_tah sili)) as B4", con2);
و به دو صورت تست کردم که خطا تغییر کرد هم که به شکل زیر است:

مرسی بابات راهنمای.

rahnema1
پنج شنبه 23 آبان 1392, 18:12 عصر
این یک رو ببینید:


select madrak_tahsili.name_madrak as name_madrak, B3.group_name as group_name,B3.totalsonati as totalsonati,B3.totalfelezi as totalfelezi,B3.totalsakhteshode as totalsakhteshode
from
(select B2.id_madrak_tahsili as id_madrak_tahsili, groups.group_name as group_name,B2.totalsonati as totalsonati,B2.totalfelezi as totalfelezi,B2.totalsakhteshode as totalsakhteshode from
(select B1.id_madrak_tahsili as id_madrak_tahsili, B1.id_group as id_group,B1.T1+B1.T11 as totalsonati,B1.T2+B1.T22 as totalfelezi,B1.T3+B1.T33 as totalsakhteshode
from
(select s1.id_madrak_tahsili as id_madrak_tahsili,s1.id_group as id_group,s1.T1 as T1,s1.T2 as T2,s1.T3 as T3 ,s2.T11 as T11,s2.T22 as T22,s2.T33 as T33 from
(select id_madrak_tahsili,id_group,sum(tbl_mojaz.sonati) as T1,sum(tbl_mojaz.felezi) as T2,sum(tbl_mojaz.sakhteshode) as T3
from tbl_mojaz
where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%'
group by tbl_mojaz.id_madrak_tahsili,tbl_mojaz.id_group ) as s1
left join
(select id_madrak_tahsili,id_group,-sum(tbl_karkard.sonati) as T11,-sum(tbl_karkard.felezi) as T22,-sum(tbl_karkard.sakhteshode) as T33 from tbl_karkard
where convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%'
group by tbl_karkard.id_madrak_tahsili,tbl_karkard.id_group ) as s2
ON (s1.id_madrak_tahsili = s2.id_madrak_tahsili
AND s1.id_group = s2.id_group)
) as B1
) as B2
left join
groups
ON (B2.id_group=groups.id_group)) as B3
left join
madrak_tahsili
ON (B3.id_madrak_tahsili=madrak_tahsili.id_madrak_tah sili)



http://mihanbit.com/download/5285623674357/sql1.zip