我试图在SQL Server中使用CASE
语句。我试图更新ProfitUSD
列,其中从Profit
列中提取的值乘以Rate
列的转换率得到Profit
(USD)(ProfitUSD
列)。基本上,我只是试图通过乘以从Rate
列中获取的各自转换率来将利润转换为美元。在SQL服务器中使用案例
任何帮助将非常感激:)
这里的问题是,当我运行此我得到以下错误:
消息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
jeezus,这实际上是错误的方式来执行此'UPDATE'。首先,你会得到那个错误,因为其中一些'(选择Rate from dbo.rates where .....)'返回的不止是一行。现在,代替这个巨大的'CASE'表达式,您应该做一个'JOIN' – Lamak 2015-03-02 20:41:43
您必须至少有一个场景,其中一个区域有多个费率。 (为什么'区域'不是唯一的?或者它是另一个唯一键的一部分,为什么这个子句没有更多的限制?)另外,呃。你有没有考虑使用连接而不是这个令人发指的'CASE' **表达式**? – 2015-03-02 20:41:43