Sql 案例陈述有多个When…不起作用!

Sql 案例陈述有多个When…不起作用!,sql,sql-server,case,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.

这是我正在做的一个简化版本,但我无法让任何东西工作。语句给了我一个错误,在“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 挑选 a、 POL_PRI_RSK_ST_CD,a.MASTER_COMPANY_NBR, 案例 当a.char046为空时,则为“ERR” 当a.char046>'010'时,则为'11+' 否则a.char046将作为政策年结束, a、 最后7天,最后30天,最后90天 从报告内部联接开始 存储库b 在a.RECORD\u ID=b.RECORD\u ID上 其中a.POL_OGN_EFF_DT>='2008-11-01' 分组 a、 POL_PRI_RSK_ST_CD,a.MASTER_COMPANY_NBR, 案例 当a.char046为空时,则为“ERR” 当a.char046>'010'时,则为'11+' 否则a.char046将作为政策年结束,
a、 Last7Days,a.Last30Days,a.Last90Days试一下,不要用逗号。。。要遵循的榜样

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

请尝试不使用逗号。。。要遵循的榜样

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

我认为您在案例结束后缺少了“AS”。

我认为您在案例结束后缺少了“AS”。

修复逗号:

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]
修正逗号:

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]

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

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

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

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

解决关于“多部分标识符”的新错误消息

表中是否有
列? 在您的查询中,From后面是什么?您是否在此过程中将多个表连接在一起?请显示整个查询

好的,根据您编辑的问题,(您不能在组员中使用别名)尝试以下操作:

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中每个表达式上的一个group by,所以您只需要一个不同的关键字,您不需要;我根本不需要小组成员:

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'

解决关于“多部分标识符”的新错误消息

表中是否有
列? 在您的查询中,From后面是什么?您是否在此过程中将多个表连接在一起?请显示整个查询

好的,根据您编辑的问题,(您不能在组员中使用别名)尝试以下操作:

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中每个表达式上的一个group by,所以您只需要一个不同的关键字,您不需要;我根本不需要小组成员:

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'

您不能在
分组依据
中使用
作为
别名。表达式应与SELECT中不带别名的表达式匹配。

您不能在
分组依据中使用
AS
别名。表达式应与SELECT中不带别名的表达式匹配。

注意:这是问题注释中调试会话的结果

关键字“as”附近的错误
语法不正确。
是由
GROUP by
子句中的
as Policy\u Years
引起的。不允许在
GROUP BY
子句中使用
as

注意:这是问题注释中调试会话的结果



关键字“as”附近的错误
语法不正确。
是由
GROUP by
子句中的
as Policy\u Years
引起的。不允许在
GROUP BY
子句中使用
as

删除逗号后会出现哪种错误?END as MOUNT提示:靠近“,”的语法不正确。删除逗号后,我得到:多部分标识符“day”无法绑定。@丹尼尔:此错误与您的CASE语句无关--您的“day”子句有问题。向我们展示完整的SQL语句,我们可以着手修复它。无法绑定多部分标识符“day”。您需要告诉查询“day”来自哪个表。将正确的表名或别名放在前面:a.Day,a.year,…@Heinzi谢谢,给你:插入到R2中选择a.Day,a.year,a.time,case当a.char046为NULL时,然后是“ERR”,当a.char046>010时,然后是“11+”,否则a.char046结束为B2,距离R1一分钟这给出了绑定错误。如果在“ERR”后面加逗号,则“,”附近的语法不正确。删除逗号后会出现哪一个错误?根据月份结束时给出的信息:“,”附近的语法不正确。删除逗号后,我得到:多部分标识符“day”无法绑定。@丹尼尔:此错误与您的CASE语句无关--您的“day”子句有问题。向我们展示完整的SQL语句,我们可以着手修复它。无法绑定多部分标识符“day”。您需要告诉查询“day”来自哪个表。将正确的表名或别名放在前面:a.Day,a.year,…@Heinzi谢谢,给你:插入到R2中选择a.Day,a.year,a.time,case当a.char046为NULL时,然后是“ERR”,当a.char046>010时,然后是“11+”,否则a.char046结束为B2,距离R1一分钟这给出了绑定错误。在“ERR”后面加逗号,我在“,”附近得到了不正确的语法。如果没有逗号,每天、每年等都会立即向我发送此消息。Msg 4104,16级,状态1,第1行多部分标识符“day”无法绑定。仍然需要逗号来分隔返回记录集的列。在case语句中不需要它们。对,我的意思是在'ERR'后面没有一个逗号。同样的错误啊,那是另一个错误。我建议用谷歌搜索这个错误,也就是说,你得到的错误表明“day”字段不是你要选择的表格的一部分。检查所选表的架构。如果没有逗号,则每天、每年等都会立即向我发送此消息。Msg 4104,级别16,状态1,第1行无法绑定多部分标识符“day”。仍然需要逗号来分隔返回记录集的列。在case语句中不需要它们。对,我的意思是在'ERR'后面没有一个逗号。同样的错误啊,那是另一个错误。我建议用谷歌搜索这个错误,即