Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server存储过程更新错误_Sql_Sql Server_Stored Procedures_Subquery - Fatal编程技术网

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
with
CASE
放在外部查询中?为什么给我-1?