【发布时间】:2016-10-25 08:00:34
【问题描述】:
我有两张桌子
Funddetails:
FundId Fund Industry State Column1
-----------------------------------------
1 1 2 NSW
2 1 2 ACT
3 1 2 VIC
4 1 2 NSW
5 1 2 ACT
6 1 2 VIC
7 1 2 NSW
8 1 2 ACT
9 1 2 VIC
Industrydetail:
IndustryId price State
-----------------------
1 12 NSW
2 1 Vic
3 3 ACT
我想写一个存储过程来更新Column1 的funddetails 表。
Column1 计算为
funddetails.Industry * Industrydetail.price - Avg of funddetails.Industry per state
如果值小于或等于-5,则返回50,否则返回100
这是我的存储过程:
UPDATE FundDetails
SET Column1 =
CASE
WHEN (funddetails.Industry * Industrydetail.price-Avg(funddetails.Industry) OVER (partition BY t2.state )) <= -5
THEN '50'
ELSE '100'
END
FROM FundDetails t2
INNER JOIN IndustryDetails t1 ON t1.State = t2.State
我收到一个错误
窗口函数只能出现在 SELECT 或 ORDER BY 子句中。
我是 SQL Server 的新手。我做错了什么,或者有没有更好的方法来做我想做的事情?
任何帮助将不胜感激。提前致谢
【问题讨论】:
-
您是否尝试过将分析子句放在子查询中,并将
UPDATE和CASE放在外部查询中? -
为什么给我-1?
标签: sql sql-server stored-procedures subquery