SQL Server存储过程正在计算每个状态的错误平均值
我有两张桌子 基金详情: 行业详情: 这就是我更新第1列的方式SQL Server存储过程正在计算每个状态的错误平均值,sql,sql-server,sql-server-2008,stored-procedures,average,Sql,Sql Server,Sql Server 2008,Stored Procedures,Average,我有两张桌子 基金详情: 行业详情: 这就是我更新第1列的方式 UPDATE FundDetails SET Column1 = CASE WHEN (funddetails.Industry * Industrydetails.price - (select Avg(funddetails.Industry * Industrydetails.price) OVER (partition BY Industry
UPDATE FundDetails
SET Column1 = CASE
WHEN (funddetails.Industry * Industrydetails.price -
(select Avg(funddetails.Industry * Industrydetails.price) OVER (partition BY Industrydetails.state)) <= -5
THEN '50'
ELSE '100'
END
FROM FundDetails
INNER JOIN Industrydetails ON FundDetails.State = Industrydetails.State
我认为你的查询给出了正确的答案。
;WITH AvgIndustryPrice (State, AverageIndustryPrice) AS
(
SELECT
FundDetails.State,
AVG (FundDetails.Industry * IndustryDetail.Price)
FROM
FundDetails
JOIN
IndustryDetail
ON
FundDetails.State = IndustryDetail.State
GROUP BY
FundDetails.State
)
UPDATE
FundDetails
SET
Column1 =
CASE
WHEN funddetails.Industry * Industrydetails.price - AvgIndustryPrice.AverageIndustryPrice <= -5
THEN '50'
ELSE '100'
END
FROM
FundDetails
JOIN
AvgIndustryPrice
ON
FundDetails.State = AvgIndustryPrice.State
您在表中添加数据的方式使funddetails.Industry*Industrydetails.price和AVG funddetails.Industry*Industrydetails.price的结果相同。抱歉,这是什么?平均值计算有何错误?您提供的示例数据在您的基金表中的所有行业值都相同,但我猜这部分的问题在于:选择Avgfunddetails.Industry*Industrydetails.price OVER partition BY Industrydetails.state摆脱选择,只需使用Avgfunddetails.Industry*Industrydetails.price OVER partition BY Industrydetails.state,看看这是否会得到您期望的结果。@ZLK如果我删除选择,那么我就是获取错误窗口函数只能出现在SELECT或ORDER BY子句中。
UPDATE FundDetails
SET Column1 = CASE
WHEN (funddetails.Industry * Industrydetails.price -
(select Avg(funddetails.Industry * Industrydetails.price) OVER (partition BY Industrydetails.state)) <= -5
THEN '50'
ELSE '100'
END
FROM FundDetails
INNER JOIN Industrydetails ON FundDetails.State = Industrydetails.State
average(funddetails.Industry * Industrydetails.price)
;WITH AvgIndustryPrice (State, AverageIndustryPrice) AS
(
SELECT
FundDetails.State,
AVG (FundDetails.Industry * IndustryDetail.Price)
FROM
FundDetails
JOIN
IndustryDetail
ON
FundDetails.State = IndustryDetail.State
GROUP BY
FundDetails.State
)
UPDATE
FundDetails
SET
Column1 =
CASE
WHEN funddetails.Industry * Industrydetails.price - AvgIndustryPrice.AverageIndustryPrice <= -5
THEN '50'
ELSE '100'
END
FROM
FundDetails
JOIN
AvgIndustryPrice
ON
FundDetails.State = AvgIndustryPrice.State