我會盡我所能讓這個問題比我最後的失敗更好。我得到了可怕的「無法找到任何一列」dbo「或用戶定義的函數或聚合」dbo.PriMonthAvgPrice「,或名稱不明確<UDF表UDV或標量UDF?
我試圖找到平均銷售價格。上個月這裏是我的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 *?
在此先感謝。
亞倫
是否有'FROM'條款有太多? – JNK
我有點懷疑,因爲我在你的函數中看到一個數據庫名稱限定的表引用('woodproduction.dbo.plywood_layup_sales')。你是否在創建函數的同一個數據庫中運行這個查詢? –
[Actual_Sales_Dollars]/pls。[Actual_Volume])=當你的列都是整數時,要小心整數數學。另外,我通常會在任何分區中放入一個零分支檢查,這樣如果底部數字爲0或空值,它就不會冒風險。你知道你的數據,也許它不需要,但這是一個很好的習慣。很多時候我有一個意想不到的零。 – HLGEM