多个案例陈述...不工作!

时间:2010-02-02 14:54:15

标签: sql sql-server case

这是我正在做的简化版本,但我无法得到任何工作。在'ERR'之后,该语句给出了一个没有逗号的错误。我希望这个专栏是'月',我想这会有效,但我遇到了很多麻烦。谢谢你的帮助!

   select 
 a.POL_PRI_RSK_ST_CD, a.MASTER_COMPANY_NBR,

case

when a.char046 is NULL then 'ERR'

when a.char046 > '010' then '11+'

else a.char046 end as Policy_Years,

a.Last7Days, a.Last30Days, a.Last90Days

from reporting a inner join

Repository b 

on a.RECORD_ID = b.RECORD_ID

where a.POL_OGN_EFF_DT >= '2008-11-01'

group by

a.POL_PRI_RSK_ST_CD, a.MASTER_COMPANY_NBR, 

case

when a.char046 is NULL then 'ERR'

when a.char046 > '010' then '11+'

else a.char046 end as Policy_Years,

a.Last7Days, a.Last30Days, a.Last90Days

8 个答案:

答案 0 :(得分:2)

尝试不带逗号...请遵循示例。

select  
   case 
      when a.month is NULL then 'ERR'
      when a.month > '011' then '12' 
      else a.month 
   end as Month, 
   a.Last7Days 
from ... 

答案 1 :(得分:2)

注意:这是问题评论中调试会话的结果。

错误Incorrect syntax near the keyword 'as'.是由as Policy_Years子句中的GROUP BY引起的。您不得在as条款中使用GROUP BY

答案 2 :(得分:0)

select 
     day, year,
case
   when a.month is NULL then 'ERR'
   when a.month > '011' then '12'
   else a.month end as Month,
 a.Last7Days

答案 3 :(得分:0)

我认为你在案件结束后错过了'AS'。

答案 4 :(得分:0)

修复逗号:

select 
     day, year,
     case
       when a.month is NULL then 'ERR'
       when a.month > '011' then '12'
       else a.month 
     end Month,
     a.Last7Days
from [table]

答案 5 :(得分:0)

DayYear周围放置方括号,如下所示:

select a.[Day], a.[Year], ...

答案 6 :(得分:0)

解决关于'多部分标识符'日'的新错误消息,

表格中有dayyear列吗? 您的查询中的From后面是什么?你是在一起加入多个表吗?请显示整个查询?

好的,基于您编辑过的问题,(您不能在Group By中使用别名)试试这个:

select a.POL_PRI_RSK_ST_CD, 
  a.MASTER_COMPANY_NBR,
  case when a.char046 is NULL then 'ERR'
       when a.char046 > '010' then '11+'
       else a.char046 end as Policy_Years,
  a.Last7Days, a.Last30Days, a.Last90Days
from reporting a 
   join Repository b 
      on a.RECORD_ID = b.RECORD_ID
where a.POL_OGN_EFF_DT >= '2008-11-01'
group by a.POL_PRI_RSK_ST_CD, 
   a.MASTER_COMPANY_NBR, 
   case when a.char046 is NULL then 'ERR'
        when a.char046 > '010' then '11+'
        else a.char046 end,
   a.Last7Days, a.Last30Days, a.Last90Days

但实际上,你根本没有聚合函数,只是在select中的每个表达式上都有一个组,所以你需要的只是一个不同的关键词,你根本不需要该组:

select Distinct a.POL_PRI_RSK_ST_CD, 
  a.MASTER_COMPANY_NBR,
  case when a.char046 is NULL then 'ERR'
       when a.char046 > '010' then '11+'
       else a.char046 end as Policy_Years,
  a.Last7Days, a.Last30Days, a.Last90Days
from reporting a 
   join Repository b 
      on a.RECORD_ID = b.RECORD_ID
where a.POL_OGN_EFF_DT >= '2008-11-01'

答案 7 :(得分:0)

您无法在AS中使用GROUP BY别名。表达式应该与SELECT中没有别名的表达式匹配。