Я сделаю все возможное, чтобы этот вопрос был лучше моего последнего фиаско. Я получаю страшный> "не могу найти ни столбец" dbo ", ни пользовательскую функцию, ни агрегат" dbo.PriMonthAvgPrice ", либо имя неоднозначное.
Я пытаюсь найти среднюю продажную цену за предыдущий месяц. Вот мой UDF:
USE [WoodProduction]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[PriMonthAvgPrice]
(
-- Add the parameters for the function here
@endofmonth datetime,
@begofmonth datetime,
@PlantCode varchar
)
RETURNS decimal (10,2)
AS
BEGIN
-- Declare the return variable here
DECLARE @MonthEndAvgPrice decimal (10,2)
-- Add the T-SQL statements to compute the return value here
SELECT @MonthEndAvgPrice =
(
select
sum(Actual_Sales_Dollars/Actual_Volume)
FROM
woodproduction.dbo.plywood_layup_sales pls
WHERE
Production_Date between @begofmonth and @endofmonth
and actual_volume <> 0
and @PlantCode = pls.Plant_Code
)
-- Return the result of the function
RETURN @MonthEndAvgPrice
END
Это мой оператор SELECT из моего запроса:
SELECT
DISTINCT
P.[Plant_Number]
,p.plant_name
,pls.plant_code
,(pls.[Budget_Realization]) AS 'BR'
,(pls.[Actual_Volume] ) AS 'AV'
,(pls.[Budget_Volume]) AS 'BV'
--,sum (dpb.[Gross_Production_Per_Hr]) AS 'GPB'
,(p.Production_Volume) AS 'PV'
,CASE
WHEN coalesce (pls.[Actual_Volume],0) = 0 and
coalesce (pls.[Actual_Sales_Dollars],0) = 0
THEN 0
ELSE (pls.[Actual_Sales_Dollars]/pls.[Actual_Volume])
END
AS 'AP'
,pls.production_date
,[dbo].[PriMonthAvgPrice](@endofmonth,@begofmonth, pls.plant_code) AS 'PriMoAvgPrice'
Мое базовое понимание - я создал скалярную функцию. Из того, что я читал о своей ошибке, эта ошибка возвращается на TVF. Это правда? До этого я создавал SVF, имея дело только с определением даты окончания предыдущего месяца, поэтому он не был таким же сложным, как этот, где я создаю запрос в UDF.
Мне нужно изменить это на TVF? И если да, то как мне включить SELECT *, когда мне нужно объединить несколько таблиц вместе с этим?
Заранее спасибо.
Aaron