سلام.
شما باید مقداری دستورتون رو Dynamic بنویسید. بهتره اول کنترل کنید مثلا اگر Productid برابر صفر بود در کوئری دوم دیگه پارامترProductId رو پاس ندید و در غیر اینصورت بهش مقدار بدید.
مثال :
ALTERProcedure [dbo].[po_SalesActual_Report]
@Year INT,
@Month VARCHAR(50),
@ProductID INT
AS
Begin
Declare @Str Varchar(1000)
Set @Str=' SELECT (V.A-V.B)/V.C AS average,V.CompanyID,V.AvgFalle,V.AvgKise25k,V.AvgK ise50k,
V.AvgJambo
from '
If @ProductId=0
Set @Str=@Str+'
(
Query Without @ProductId
)AS v'
Else
Set @Str=@Str+' (
Query with @ProductID value
)AS v'
exec(@Str)
END