ورود

View Full Version : ضرب دو مقدار و ریختن در یک متغیر در استورد پروسیجر



jafarpalideh
چهارشنبه 18 تیر 1393, 14:44 عصر
با سلام .
من تویه نوشتن پروسیجر زیر یه مشکل دارم.
یه متغیر به نام @z تعریف کردم و میخوام ضرب
SUM(dbo.S_DTL_FCT.QUANTITY) AS Expr1 و dbo.S_DTL_FCT.UN_PRC AS Expr2
رو
در اون بریزم ولی هر کار میکنم نمیشه . دوستان راهنمایی کنن لطفا.

اینم از کوئری


CREATE PROCEDURE s2 @x char(8),@y nvarchar(8),@z int output
as




SELECT TOP 100 PERCENT SUM(dbo.S_DTL_FCT.QUANTITY) AS Expr1, dbo.S_DTL_FCT.UN_PRC AS Expr2, dbo.S_ODS.OD_CD,
dbo.S_CUSTOMER.CUST_CD
FROM dbo.S_CUSTOMER INNER JOIN
dbo.S_HED_FCT ON dbo.S_CUSTOMER.CUST_CD = dbo.S_HED_FCT.CUST_CD INNER JOIN
dbo.S_DTL_FCT ON dbo.S_HED_FCT.id = dbo.S_DTL_FCT.id INNER JOIN
dbo.S_ODS ON dbo.S_DTL_FCT.OD_CD = dbo.S_ODS.OD_CD
WHERE (dbo.S_DTL_FCT.Stock_cd = 1) AND (dbo.S_HED_FCT.Stock_cd = 1) AND (dbo.S_HED_FCT.Price_Kind = 2) AND (dbo.S_HED_FCT.TYPERH_CD = 2)
AND (dbo.S_HED_FCT.ACC_YEAR = 1393) AND FACT_DATE between @x and @y
GROUP BY dbo.S_ODS.OD_CD, dbo.S_CUSTOMER.CUST_CD, dbo.S_DTL_FCT.UN_PRC
ORDER BY dbo.S_CUSTOMER.CUST_CD
GO

jafarpalideh
پنج شنبه 19 تیر 1393, 08:50 صبح
خوب مثل اینکه دوستان منظور من رو خوب متوجه نشدن

من میخوام حاصلضرب


SUM(dbo.S_DTL_FCT.QUANTITY) AS Expr1, dbo.S_DTL_FCT.UN_PRC AS Expr2

روتویه یه ستون جدید نگه دارم .
یه عکس از اون چیزی که میخوام میزارم .

120968

aslan
پنج شنبه 19 تیر 1393, 12:13 عصر
چرا نمیشه ؟
چه جوری می نویسین که نمیشه ؟( کوئری را که مینویسین اینجا قرار بدین )
چه اروری میده ؟

jafarpalideh
پنج شنبه 19 تیر 1393, 13:27 عصر
من اصلا نمیدونم چطور بنویسم . چه برسه به خطاش .!!!!!
خوب وقتی بلد نباشو بنویسم خوب یه چیز الکی مینویسم و خطا میده دیگه !!!
شما بگو چطور بنویسم تا خطاش رو بهت بگم

plus
پنج شنبه 19 تیر 1393, 14:20 عصر
SELECT ..., (SUM(dbo.S_DTL_FCT.QUANTITY) * dbo.S_DTL_FCT.UN_PRC) AS MulResult, .... FROM ....

jafarpalideh
پنج شنبه 19 تیر 1393, 14:40 عصر
اونجایه قضیه درسته . ولی من میخوام که اون multresult رو بریزم تویه یه متغیر خروجی مثل Z و بفرستمش به برنامم .

CREATE PROCEDURE s2 @x char(8),@y nvarchar(8),@z int output
as




SELECT TOP 100 PERCENT SUM(dbo.S_DTL_FCT.QUANTITY) AS Expr1, dbo.S_DTL_FCT.UN_PRC AS Expr2, dbo.S_ODS.OD_CD,
dbo.S_CUSTOMER.CUST_CD , @z= (SUM(dbo.S_DTL_FCT.QUANTITY) * dbo.S_DTL_FCT.UN_PRC)
FROM dbo.S_CUSTOMER INNER JOIN
dbo.S_HED_FCT ON dbo.S_CUSTOMER.CUST_CD = dbo.S_HED_FCT.CUST_CD INNER JOIN
dbo.S_DTL_FCT ON dbo.S_HED_FCT.id = dbo.S_DTL_FCT.id INNER JOIN
dbo.S_ODS ON dbo.S_DTL_FCT.OD_CD = dbo.S_ODS.OD_CD
WHERE (dbo.S_DTL_FCT.Stock_cd = 1) AND (dbo.S_HED_FCT.Stock_cd = 1) AND (dbo.S_HED_FCT.Price_Kind = 2) AND (dbo.S_HED_FCT.TYPERH_CD = 2)
AND (dbo.S_HED_FCT.ACC_YEAR = 1393) AND FACT_DATE between @x and @y
GROUP BY dbo.S_ODS.OD_CD, dbo.S_CUSTOMER.CUST_CD, dbo.S_DTL_FCT.UN_PRC
ORDER BY dbo.S_CUSTOMER.CUST_CD
GO




اینو نوشتم ولی ارور میده چون میدونم دارم اشتباه مینویسمش

plus
پنج شنبه 19 تیر 1393, 15:27 عصر
با View ی که شما گذاشتین، حاصل ضرب مورد نظرتون "یک" مقدار نیست که بخواین توی یک متغیر بریزین؛ به ازای هر رکورد در خروجی SELECT یک مقدار هست، در واقع خروجی مورد نظر یک ستون به ستون های SELECT اضافه کرده. اگه اینطوری هست، کدی که من براتون گذاشتم یک ستون با نام MulResult به ستون های خروجی اضافه میکنه که مقدارش در هر سطر، حاصلضرب ستون اول و دوم (توی View شما) هست و توی DataTable خروجی که در برنامه از اجرای SP میگیرین مقادیر این ستون قابل دسترس هست.
مگر اینکه منظورتون، مجموع حاصلضرب دو مقدار ستون باشه.

jafarpalideh
پنج شنبه 19 تیر 1393, 15:37 عصر
آره حرفتون کاملا درسته .
من اون SP رو میخوام . همین .
البته کار من با همین view هم راه میوفته .
فقط چطور میتونم این بین یه جستجو انجام بدم اونم با ارسال پارامتر ؟