SQL Server存储过程更新错误
我有两张桌子SQL Server存储过程更新错误,sql,sql-server,stored-procedures,subquery,Sql,Sql Server,Stored Procedures,Subquery,我有两张桌子 Funddetails: FundId Fund Industry State Column1 ----------------------------------------- 1 1 2 NSW 2 1 2 ACT 3 1 2 VIC 4 1
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
我想编写一个存储过程来更新funddetails
表的Column1
第1列
计算如下
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
更新基金详细信息
设置列1=
案例
当(funddetails.Industry*industrydetails.price Avg(funddetails.Industry)超过(按t2.state划分))时,您可以如下所示:
UPDATE FundDetails
SET Column1 = CASE WHEN (funddetails.Industry * t1.price- t2.MyAvg) <= -5 THEN '50'
ELSE '100' END
FROM
(SELECT fd.*, Avg(fd.Industry) OVER (partition BY fd.state ) MyAvg FROM FundDetails fd) t2 INNER JOIN
IndustryDetails t1 on t1.State = t2.State
--WHERE FundDetails.Id = t2.Id
更新基金详细信息
设置Column1=CASE WHEN(funddetails.Industry*t1.price-t2.MyAvg)修改代码如下
UPDATE FundDetails
SET Column1= CASE
WHEN (funddetails.Industry*Industrydetails.price-
(select Avg(funddetails.Industry) OVER (partition BY FundDetails.state))
<= -5 THEN '50' ELSE '100'
END
FROM FundDetails
INNER JOIN Industrydetails on FundDetails.State = Industrydetails.State
更新基金详细信息
SET Column1=大小写
何时(funddetails.Industry*Industrydetails.price)-
(选择平均值(funddetails.Industry)超过(按funddetails.state划分))
您是否尝试过将分析子句放在子查询中,并将UPDATE
withCASE
放在外部查询中?为什么给我-1?