I'm trying to create a view in which i have to apply a Stored procedure to specific dollar values in the result set. I started by declaring a table variable to hold the SP results. The stored procedure paramter would be the o.ord_hdrnumber column the in the select statement, so i need to execute the stored procedure with that number then return the require values from the SP in the main view select statement.
CREATE view [dbo].[sp_salesreport_ca]
as
Declare @ExchangeRate TABLE (RevCan MONEY, CostCAN MONEY, GP_CAN MONEY)
INSERT INTO @ExchangeRate EXEC ExchangeRate_SP @OrderNum in ( ) --I need to pass through whatever results i get from the query below into this SP.
select
o.ord_hdrnumber as [ord_number],
o.mov_number as [mov_number],
o.ord_status as [ord_status],
CASE WHEN o.ord_invoicestatus='PPD' then 'Y' else 'N' END as [invoiced],
convert(date, o.ord_startdate) as [ship_date],
convert(date, o.ord_completiondate) as [del_date],
o.ord_billto as [billto_id],
c.cmp_name as [billto_name],
ct1.cty_name as [origin_city],
ct1.cty_state as [originstate],
ct2.cty_name as [dest_city],
ct2.cty_state as [deststate],
o.ord_revtype3 as [office],
s.ord_revtype2 as [sales_rep],
o.ord_subcompany as [sales_rep_code],
o.ord_bookedby as [book_rep],
@ExchangeRate.RevCAN as [revenue], --I know this is all invalid, but i can't join the Table Variable
@ExchangeRate.CostCAN as [cost], --declared above because there is no way to join it to
@ExchangeRate.GP_CAN as [gross_profit] --ORDERHEADER
from ORDERHEADER o
inner join customers c
on o.ord_billto = c.cmp_id
inner join CITY ct1
on o.ord_origincity = ct1.cty_code
inner join CITY ct2
on o.prd_destcity = ct2.cty_code_CD
where o.ord_subcompany='SALESID'
I'm not really sure how to go about this, any help would be appreciated! I should be able to edit the SP, but i'd rather not if i don't have to.
Best Practice is not to name Stored Procedures (I know this is intended to be a VIEW ...) with the prefix "SP_" as that is reserved for SQL itself. When you EXEC an SProc with a name starting with "SP_" then SQL will look in multiple places for the SProc, which is slower than just looking in the current DB, so best to use a different prefix for the name.
how often does exchange rate change?
do you need to keep track of historical exchange rates?
is exchange rate per country per monetary value etc , or is this just local exchange or international
Doesn't help in this scenario, but for this particular comment you can do
FROM ORDERHEADER AS O
JOIN @ExchangeRate AS E
ON 1=1
...
which would mean that you have the columns in @ExchangeRate available in your SELECT statements. This will be a Cartesian JOIN - so every row in @ExchangeRate will join to every row in ORDERHEADER, so it usually only makes sense to do this if you only have one row in @ExchangeRate.
There are other styles of Cartesian JOIN, some people probably won't like my "ON 1=1" style ... so if you go down that route you might want to pick a different style!!
You just lit a lightbulb over my head; I just remember i can just join our Exchange rates table log ( We insert new values daily and apply the monthly average to the $ values for revenue, cost and profit.
Thank you! I think i have this covered now..i always overthink things and jump the gun with my posts!