2010-02-02 57 views
0

这是我正在做的简化版本,但我无法获得任何工作。该声明在'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
+0

删除逗号后会得到哪个错误? – Heinzi 2010-02-02 14:59:14

+1

END AS MONTH给我:','附近语法不正确。 删除逗号后,我得到:多部分标识符“day”无法绑定。 – Daniel 2010-02-02 15:01:43

+1

@Daniel:这个错误与您的CASE声明无关 - 您的“day”条款有问题。向我们展示完整的SQL语句,我们可以解决这个问题。 – Heinzi 2010-02-02 15:03:22

回答

2

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

误差Incorrect syntax near the keyword 'as'.通过as Policy_YearsGROUP BY子句中引起的。 GROUP BY条款中不允许使用as

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 ... 
+0

如果没有逗号,则会立即为每一天,每年等发送此消息。 消息4104,级别16,状态1,行1 无法绑定多部分标识符“day”。 – Daniel 2010-02-02 14:59:44

+0

逗号仍然需要分隔返回的记录集的列。在案件陈述中你不需要他们。 – Mayo 2010-02-02 15:01:17

+0

对,我的意思是在'ERR'之后没有那个逗号。同样的错误 – Daniel 2010-02-02 15:02:46

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 
+0

仍然出现错误。往上看。 – Daniel 2010-02-02 15:03:17

0

我认为你缺少 'AS' 的情况下结束后。

+0

可选,不需要... – 2010-02-02 15:16:00

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] 
0

放在方括号DayYear,像这样:

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

这只是一个例子,一天不在实际陈述 – Daniel 2010-02-02 15:04:12

+0

请发表实际陈述。 – RedFilter 2010-02-02 15:05:28

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 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' 
+0

选择 \t a.POL_PRI_RSK_ST_CD为国家,为a.MASTER_COMPANY_NBR Original_CO, 情况 \t当a.char046为NULL,则 'ERR' \t当a.char046> '010',那么'11 +” \t别的一个。 char046端作为Policy_Years, \t a.Last7Days,a.Last30Days,从报告一个内a.Last90Days 上a.RECORD_ID = b.RECORD_ID 加入 库b 其中a.POL_OGN_EFF_DT> = '2008-11-01' group by \t a.POL_PRI_RSK_ST_CD,a.MASTER_COMPANY_NBR, \t case \t当a.char046为NULL时,则'ERR' \t当a。'010'then '11 +' \t else a.char046 end as Policy_Years, \t a.Last7Days,a.Last30Days,a.Last90Days – Daniel 2010-02-02 15:23:58

+0

我编辑了这个问题。谢谢 – Daniel 2010-02-02 15:26:30

0

你不能在GROUP BY使用AS别名。该表达式应该与SELECT中没有别名的表达式匹配。