به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
سلام .
دوستا ن من دو جدول دارم که میخوام ستون های مشابه را سام کنم.
برای ستون اول مشکلی ندارد که کد زیر است :
SqlDataAdapter da2 = new SqlDataAdapter("select sum(B1.T1)from(select sum(tbl_mojaz.sonati)T1 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 all select -sum(tbl_karkard.sonati) 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);
اما برای زمانی که بخواهم ستون دوم اضافه کنم برنامه دچار خطا میشود ، در کل نمیدونم چطور ستون دوم اضافه کنم.
ممنون میشم راهنمایی کنید.
با تشکر.
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
سلام داده های نمونه رو بذارید تا دوستان بهتر بتونن راهنمایی کنن
1 ضمیمه
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
نقل قول:
نوشته شده توسط
Salah Sanjabian
سلام داده های نمونه رو بذارید تا دوستان بهتر بتونن راهنمایی کنن
سلام به شکل زیر هستند جداولم و کارش هم مثال زدم .
من ستون اول را طبق کد بالا(ستون سنتی ) مانده را در آوردم اما برای دو ستون دیگر نمیشه.
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
سلام
;
WITH Cte AS
(
SELECT Code_ozviat,SUM(SakhteShode) AS TotalSakhteShode,SUM(Felezi) AS TotalFelezi,SUM(Sonati) AS TotalSonati
FROM @Tbl_mojaz
GROUP BY Code_ozviat
)
,
Cte2 AS
(
SELECT Code_ozviat,SUM(SakhteShode) AS TotalSakhteShode,SUM(Felezi) AS TotalFelezi,SUM(Sonati) AS TotalSOnati
FROM @Tbl_Karkard
GROUP BY Code_ozviat
)
SELECT Cte.Code_ozviat,ISNULL(Cte.TotalSakhteShode-Cte2.TotalSakhteShode,0),ISNULL(Cte.TotalFelezi-Cte2.TotalFelezi,0),ISNULL(Cte.TotalSonati-Cte2.TotalSOnati,0)
FROM Cte
LEFT JOIN Cte2
ON Cte.Code_ozviat = Cte2.Code_ozviat
WHERE cte.Code_ozviat=1
میتونی تو اس کو ال سرور تست کنی بعد تو ویژوال استودیو . البته پیشنهاد نمیکنم به صورت رشته تو پروژه ت بنویسی بهتره به صورت پروسیجر بنویسی بعد پروسیجر رو Call کنی
یه چیز دیگه که توجه کردم این بود که نمیخواد رو جدول اول Sum بزنی چون ستون ID کلید هست و فقط یک بار تکرار میشه البته من واسه اطمینان چون شما Sum زدین اینکارو کردم . درسته ؟
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
سلام.
میتونید از روش زیر هم که همون تکمیل شده روش خود شماست استفاده کنید.
Select Sum (B1.T1) as Sonati , Sum(b1.t2) as TotalFelezi, sum(b1.t3 ) as totalsakhteshode
From
(select sonati as T1 ,Felezi as T2,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 all
select -sonati as T1 ,-Felezi as T2,-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 ) as B1
فقط میتونید از لحاظ Performance هر دو Query رو باهم اجرا کنید و Execution Plan رو نیز انتخاب کنید و ببینید Plan کدوم مناسبتره و هزینه کدوم یک از این Query ها کمتره.
1 ضمیمه
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
سلام مرسی از دوستان.
طبق گفته های آقای صادقیان تغییر و به نتیجه رسیدم .
نقل قول:
یه چیز دیگه که توجه کردم این بود که نمیخواد رو جدول اول Sum بزنی چون ستون ID کلید هست و فقط یک بار تکرار میشه البته من واسه اطمینان چون شما Sum زدین اینکارو کردم . درسته ؟
جدول مجاز هم مقادیر دیگری برای یک کد عضویت وارد میشه به همین دلیل مجموع آن هم خواستم.
دوستان اگر توجه کردید در کد من :
Group by id_madrak_tahsili , id_group
در هر دو جدول داشتم. که مقادیر طبق این دو متمایز میکردم.
من دو جدول دیگر به نام های گروه و مدرک تحصیلی دارم حال میخوام علاوه بر این سه مقدار(سنتی ، فلزی ، ساخته شده ) نمایش داده شده گروه و مدرک تحصیلی هم نمایش بدم ، کدش بلدم که باید نام گروه و نام مدرک سلکت کنم و با ای دی مقایسه کنم و مقادیر مشابه را نمایش بدم . این کد زمانی میتونستم بنویسم خودم به راحتی که کد بالا نبود ولی الان کد بالا که نوشتم نمیدونم این 2 ستون دیگر را چطوری بنویسم که برنامه خطا نگیره.
یک نمونه کد میزارم که باعث میشه شکل زیر به وجود بیاد:
SqlDataAdapter da1 = new SqlDataAdapter("select tbl_karkard.add_sal,sum(tbl_karkard.sonati),sum(tb l_karkard.felezi),sum(tbl_karkard.sakhteshode),gro ups.group_name,madrak_tahsili.name_madrak from tbl_karkard,groups,madrak_tahsili where groups.id_group=tbl_karkard.id_group and madrak_tahsili.id_madrak_tahsili=tbl_karkard.id_ma drak_tahsili and convert (varchar,code_ozviat) like N'%" + txt_code_ozviat.Text + "%' group by tbl_karkard.add_sal,tbl_karkard.id_group,tbl_karka rd.id_madrak_tahsili,groups.group_name,madrak_tahs ili.name_madrak", con1);
دو تا ضربدر ابی از کد بالا پیروی میکنند حال جدول پایین ( جدول 3 ) هم چیزی که کدش در پست قبلی گذاشتم . حال چطور میتونم مثل دو جدول دیگر گروه و مدرک شخص را هم اضافه کنم.
با تشکر.
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
نقل قول:
نوشته شده توسط
حمیدرضاصادقیان
سلام.
میتونید از روش زیر هم که همون تکمیل شده روش خود شماست استفاده کنید.
Select Sum (B1.T1) as Sonati , Sum(b1.t2) as TotalFelezi, sum(b1.t3 ) as totalsakhteshode
From
(select sonati as T1 ,Felezi as T2,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 all
select -sonati as T1 ,-Felezi as T2,-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 ) as B1
فقط میتونید از لحاظ Performance هر دو Query رو باهم اجرا کنید و Execution Plan رو نیز انتخاب کنید و ببینید Plan کدوم مناسبتره و هزینه کدوم یک از این Query ها کمتره.
اینم یه روش ولی یه نکته جناب صادقیان و اونم اینکه تو Derived تیبل دیگه نمیخواد گروه بندی کنید چون شما از توابع تجمعی استفاده نکردین
نقل قول: به چه صورت از دستور Sum برای چند ستون استفاده کنیم ؟
اوههه درسته/چون من کد ایشون رو کپی کردم دیگه به این نکته توجه نکردم.