Pra*_*els 1 sql sql-server sql-server-2014
我正在尝试CASE在SQL Server中使用一个语句.我正在尝试更新ProfitUSD列中从Profit列中获取的值乘以列中的转换率Rate以获取ProfitUSD(ProfitUSD列).基本上,我只是试图通过乘以从Rate列中获取的相应转换率将利润转换为美元条款.
任何帮助将非常感激 :)
这里的问题是当我运行这个时,我收到以下错误:
消息512,级别16,状态1,行1
子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.该语句已终止
码:
update dbo.[5 Mins]
set ProfitUSD =
case
when Region='AEX 30 Netherlands' then Profit*(select rate from dbo.rates where Region='AEX 30 Netherlands')
when Region='ASX Australia' then Profit*(select Rate from dbo.rates where Region='ASX Australia')
when Region='Athens' then Profit*(select Rate from dbo.rates where Region='Athens')
when Region='Austria' then Profit*(select Rate from dbo.rates where Region='Austria')
when Region='Bahrain' then Profit*(select Rate from dbo.rates where Region='Bahrain')
when Region='Bovespa' then Profit*(select Rate from dbo.rates where Region='Bovespa')
when Region='Brussels' then Profit*(select Rate from dbo.rates where Region='Brussels')
when Region='Bucharest' then Profit*(select Rate from dbo.rates where Region='Bucharest')
when Region='Budapest' then Profit*(select Rate from dbo.rates where Region='Budapest')
when Region='Bulgaria' then Profit*(select Rate from dbo.rates where Region='Bulgaria')
when Region='CAC 40' then Profit*(select Rate from dbo.rates where Region='CAC 40')
when Region='CBOT' then Profit*(select Rate from dbo.rates where Region='CBOT')
when Region='CME Globex' then Profit*(select Rate from dbo.rates where Region='CME Globex')
when Region='Comex Metal' then Profit*(select Rate from dbo.rates where Region='Comex Metal')
when Region='Copanhagen' then Profit*(select Rate from dbo.rates where Region='Copanhagen')
when Region='DJ Euro Stoxx 50' then Profit*(select Rate from dbo.rates where Region='DJ Euro Stoxx 50')
when Region='Doha' then Profit*(select Rate from dbo.rates where Region='Doha')
when Region='Egypt' then Profit*(select Rate from dbo.rates where Region='Egypt')
when Region='FTSE' then Profit*(select Rate from dbo.rates where Region='FTSE')
when Region='FTSE Malaysia' then Profit*(select Rate from dbo.rates where Region='FTSE Malaysia')
when Region='Hang Seng' then Profit*(select Rate from dbo.rates where Region='Hang Seng')
when Region='Helsinki' then Profit*(select Rate from dbo.rates where Region='Helsinki')
when Region='ICE Nybot' then Profit*(select Rate from dbo.rates where Region='ICE Nybot')
when Region='ICEX Iceland' then Profit*(select Rate from dbo.rates where Region='ICEX Iceland')
when Region='Istanbul' then Profit*(select Rate from dbo.rates where Region='Istanbul')
when Region='Johannesberg' then Profit*(select Rate from dbo.rates where Region='Johannesberg')
when Region='Lima' then Profit*(select Rate from dbo.rates where Region='Lima')
when Region='Lisbon' then Profit*(select Rate from dbo.rates where Region='Lisbon')
when Region='Moroccan' then Profit*(select Rate from dbo.rates where Region='Moroccan')
when Region='Moscow' then Profit*(select Rate from dbo.rates where Region='Moscow')
when Region='New Zeland NZX' then Profit*(select Rate from dbo.rates where Region='New Zeland NZX')
when Region='Nigeria 30 Lagos' then Profit*(select Rate from dbo.rates where Region='Nigeria 30 Lagos')
when Region='Nse All' then Profit*(select Rate from dbo.rates where Region='Nse All')
when Region='Oman' then Profit*(select Rate from dbo.rates where Region='Oman')
when Region='Oslo' then Profit*(select Rate from dbo.rates where Region='Oslo')
when Region='Parague' then Profit*(select Rate from dbo.rates where Region='Parague')
when Region='Philippines' then Profit*(select Rate from dbo.rates where Region='Philippines')
when Region='Santiago' then Profit*(select Rate from dbo.rates where Region='Santiago')
when Region='Saudi' then Profit*(select Rate from dbo.rates where Region='Saudi')
when Region='Shanghai' then Profit*(select Rate from dbo.rates where Region='Shanghai')
when Region='Slovenia' then Profit*(select Rate from dbo.rates where Region='Slovenia')
when Region='Spain' then Profit*(select Rate from dbo.rates where Region='Spain')
when Region='STI Singapore' then Profit*(select Rate from dbo.rates where Region='STI Singapore')
when Region='Stockholm' then Profit*(select Rate from dbo.rates where Region='Stockholm')
when Region='Swiss' then Profit*(select Rate from dbo.rates where Region='Swiss')
when Region='Toronto' then Profit*(select Rate from dbo.rates where Region='Toronto')
when Region='TSE Tokyo' then Profit*(select Rate from dbo.rates where Region='TSE Tokyo')
when Region='Tunisia' then Profit*(select Rate from dbo.rates where Region='Tunisia')
when Region='Turquise Italy' then Profit*(select Rate from dbo.rates where Region='Turquise Italy')
when Region='Warsaw' then Profit*(select Rate from dbo.rates where Region='Warsaw')
when Region='NASDAQ 100' then Profit*(select Rate from dbo.rates where Region='NASDAQ 100')
when Region='Abu Dhabi' then Profit*(select Rate from dbo.rates where Region='Abu Dhabi')
when Region='Nordic' then Profit*(select Rate from dbo.rates where Region='Nordic')
when Region='NYSE All' then Profit*(select Rate from dbo.rates where Region='NYSE All')
when Region='Seoul' then Profit*(select Rate from dbo.rates where Region='Seoul')
when Region='Taiwan' then Profit*(select Rate from dbo.rates where Region='Taiwan')
when Region='Ukraine' then Profit*(select Rate from dbo.rates where Region='Ukraine')
else ProfitUSD
end
Run Code Online (Sandbox Code Playgroud)
这不会解决您的问题,但使用updatewith join将使查询更容易使用:
update f
set ProfitUSD = Profit * coalesce(Rate, 1.0)
from dbo.[5 Mins] f left join
dbo.rates r
on f.Region = r.Region;
Run Code Online (Sandbox Code Playgroud)
请注意,这假设表中没有其他区域可能匹配,但您没有提及case.这似乎是一个合理的假设.
此版本将起作用,因为它不会生成错误.问题是一个或多个区域中有一行或多行rates.你可以找到它们:
select region, count(*)
from dbo.rates r
group by region
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
然后修复数据.或者决定你想要哪一行并修复你的逻辑.在这个版本中,逻辑将更容易修复.