View Full Version : جمع دو ستون مجازی
moferferi
چهارشنبه 29 مرداد 1393, 13:22 عصر
سلام.
ببخشید که سوالم خیلی مبتدیه:لبخندساده:
چطور میشه بین دو ستون مجازی جمع و یا تفریق کرد
مثلا به جای
declare @a as int;
declare @b as int;
set @a=1;
set @b=2;
select @a+111 as 'temp1',@b+222 as 'temp2',@a+111+@b+222 as 'temp3'
بنویسیم
declare @a as int;
declare @b as int;
set @a=1;
set @b=2;
select @a+111 as 'temp1',@b+222 as 'temp2',cast('temp1' as int)+cast('temp2' as int) as 'temp3'
ولی در حالت دوم خطای
Conversion failed when converting the varchar value 'temp1' to data type int
داده میشه
در ضمن این کار ار من میخوام توی دستوری که بیش از یک نتیجه داره بکار ببرم
اگه یک ردیف بود همون دو تا متغیر را تعریف میکردم و مقادیر را توی اون ذخیره میکرم و مشکلی نداشتم.اما الان تعداد ردیف های برگشتی خیلی زیاد و محاسبه مقدار temp1 و temp2 هم سنگینه.
برای همین نمیخوام برای محاسبه temp3 دومرتبه مقدار temp1 و temp2 را حساب کنم
با تشکر
Reza_Yarahmadi
چهارشنبه 29 مرداد 1393, 13:44 عصر
میتونید بصورت زیر عمل کنید
declare @a as int;
declare @b as int;
set @a=1;
set @b=2;
;With Res AS(
select @a+111 as temp1,@b+222 as temp2)
Select temp1 + temp2 as temp3
From Res
moferferi
چهارشنبه 29 مرداد 1393, 14:37 عصر
ممنون
من توی خروجی همزمان مقادیر temp1,temp2,temp3 را میخوام نشون بدم
و اینکه وقتی تعداد رکورد ها بیشتر از یک مورد باشه باید چکار کنم؟دیگه اون موقع نمیتونم از متغیر استفاده کنم
moferferi
چهارشنبه 29 مرداد 1393, 14:47 عصر
گزارش من اینه
SELECT Branch.BranchInfo,MarakezQ.ID, MarakezQ.NameTerm,MarakezQ.DTStart,MarakezQ.Sal,Ma rakezQ.DTEnd,MarakezQ.TedadJalasat ,
MarakezQ.Active,
MarakezQ.Archive,
MarakezQ.TimeJalase,
MarakezQ.TedadJalase,
MarakezQ.DarsadMorabi,
MarakezQ.DarsadSayer1,
MarakezQ.DarsadModir,
MarakezQ.DarsadMoragheb,
MarakezQ.DarsadMarkaz,MarakezQ.MojavezBargozari,
MarakezQ.DarsadSayer2,
Asatid.PersonName,
Asatid.ShomareParpande,
TypePardakhtHoghogh.ItemName,
Asatid.TarikhEtmamGharardad,
dbo.[sumRegMQ](MarakezQ.ID) as 'tedadsabtenam',
dbo.[sumPayMQ](MarakezQ.ID,null) as 'majmoeDaryaft',
dbo.[sumRegMQ](MarakezQ.ID) * MarakezQ.Shahriye as 'hazinekol',MarakezQ.Shahriye,MarakezQ.Report
FROM MarakezQ INNER JOIN
Branch ON MarakezQ.BranchID_FK = Branch.ID INNER JOIN
Asatid ON MarakezQ.OstadID = Asatid.ID
INNER JOIN
TypePardakhtHoghogh ON MarakezQ.TypeGharardad = TypePardakhtHoghogh.ID
where
MarakezQ.BranchID_FK=58
این گزارش لیست دوره ها تعداد افرای که توی اون دوره ثبت نام کرده اند(به وسیله فانکشن dbo.[sumRegMQ]) و مجموع پولی که از افراد برای ثبت نام توی اون دوره گرفته شده(به وسیله فانکشن dbo.[sumPayMQ]) را نشون میده.
حالا من میخوام به جای اینکه در خط
dbo.[sumRegMQ](MarakezQ.ID) * MarakezQ.Shahriye as 'hazinekol'
که هزینه کل را محاسبه میکنم ، دو مرتبه از فانکشن sumRegMQ استفاده نکنم و بجاش از مقدار ستون tedadsabtenam استفاده بکنم
Reza_Yarahmadi
پنج شنبه 30 مرداد 1393, 19:09 عصر
With Res AS(
SELECT Branch.BranchInfo,MarakezQ.ID, MarakezQ.NameTerm,MarakezQ.DTStart,MarakezQ.Sal,Ma rakezQ.DTEnd,MarakezQ.TedadJalasat ,
MarakezQ.Active,
MarakezQ.Archive,
MarakezQ.TimeJalase,
MarakezQ.TedadJalase,
MarakezQ.DarsadMorabi,
MarakezQ.DarsadSayer1,
MarakezQ.DarsadModir,
MarakezQ.DarsadMoragheb,
MarakezQ.DarsadMarkaz,MarakezQ.MojavezBargozari,
MarakezQ.DarsadSayer2,
Asatid.PersonName,
Asatid.ShomareParpande,
TypePardakhtHoghogh.ItemName,
Asatid.TarikhEtmamGharardad,
dbo.[sumRegMQ](MarakezQ.ID) as 'tedadsabtenam',
dbo.[sumPayMQ](MarakezQ.ID,null) as 'majmoeDaryaft',
MarakezQ.Shahriye,
MarakezQ.Report
FROM MarakezQ INNER JOIN
Branch ON MarakezQ.BranchID_FK = Branch.ID INNER JOIN
Asatid ON MarakezQ.OstadID = Asatid.ID
INNER JOIN
TypePardakhtHoghogh ON MarakezQ.TypeGharardad = TypePardakhtHoghogh.ID
where
MarakezQ.BranchID_FK=58
)
Select *,
tedadsabtenam * MarakezQ.Shahriye as 'hazinekol',
From Res
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.