首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件语句下的“期望EOS”

条件语句下的“期望EOS”
EN

Stack Overflow用户
提问于 2020-10-28 16:09:20
回答 1查看 34关注 0票数 0

MS SQL Server在以CASE开头的条件语句下告诉我‘期望EOS’。有人能找出这段代码出了什么问题吗?

代码语言:javascript
复制
SELECT 
    goal,
    AVG(pledged) AS avg_num_pledged, 
    AVG(backers) AS avg_num_backers


CASE WHEN currency='GBP' THEN goal*1.3

ELSEIF =currency ='CAD' THEN goal*0.76

ELSEIF currency ='AUD' THEN goal*0.71

ELSEIF currency ='NOK' THEN goal*0.11

ELSEIF currency ='EUR' THEN goal*1.18

ELSEIF currency ='MXN' THEN goal*0.048

ELSEIF currency='SEK' THEN goal*0.11

ELSEIF currency='NZD' THEN goal*0.67

ELSEIF currency='CHF' THEN goal*1.11

ELSEIF currency='DKK' THEN goal*0.16

ELSEIF currency='HKD' THEN goal*0.13

ELSEIF currency='SGD' THEN goal*0.74
ELSEIF currency='JPY' THEN goal*0.0095

ELSE goal

END AS currency_uniformed



FROM kickstarter;
EN

回答 1

Stack Overflow用户

发布于 2020-10-28 19:05:14

正如前面的注释所指出的,CASE语法是不正确的。也可以将乘法移到CASE表达式之外。为了获得一个可运行的查询,还缺少一个处理跨goal列的聚合(AVG())的grouping子句。

代码语言:javascript
复制
SELECT goal,
       AVG(
       case currency
          when 'GBP' then 1.3
          when 'CAD' then 0.76
          when 'AUD' then 0.71
          ...
          else 1
        end * goal) AS goal_currency_uniformed,
       AVG(pledged) AS avg_num_pledged, 
       AVG(backers) AS avg_num_backers
FROM kickstarter
GROUP BY goal;

请考虑将汇率移动到单独的表中。这将允许您将此查询精简一点,并且有一个额外的优势,即您可以在不重新编写代码的情况下更新汇率。

代码语言:javascript
复制
SELECT ks.goal,
       AVG(er.rate * ks.goal) as goal_currency_uniformed,
       AVG(pledged) AS avg_num_pledged, 
       AVG(backers) AS avg_num_backers
FROM kickstarter ks
JOIN exchangerates er ON er.currency = ks.currency
GROUP BY goal;

Fiddle查看所有实际操作的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64568754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档