Case case с несколькими вариантами когда ... не работает! - PullRequest
0 голосов
/ 02 февраля 2010

Это упрощенная версия того, что я делаю, но я не могу заставить что-либо работать. Утверждение дает мне ошибку без запятой после «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 ]

2 голосов
/ 02 февраля 2010

Примечание. Это результат сеанса отладки в комментариях к вопросу.

Ошибка Incorrect syntax near the keyword 'as'. была вызвана as Policy_Years в предложении GROUP BY.Вы не можете использовать as в предложении GROUP BY.

2 голосов
/ 02 февраля 2010

Попробуйте без запятых ... пример для подражания.

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 голосов
/ 02 февраля 2010

Вы не можете использовать псевдоним AS в GROUP BY. Выражение должно соответствовать выражению в вашем SELECT без псевдонима.

0 голосов
/ 02 февраля 2010

Обращение к вашему новому сообщению об ошибке «идентификатор из нескольких частей« день »,

Есть ли в таблице столбцы day и 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, поэтому все, что вам нужно, это ключевое слово Distinct, вам вообще не нужна группа: *

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 голосов
/ 02 февраля 2010

Поставьте квадратные скобки вокруг Day и Year, например:

select a.[Day], a.[Year], ...
0 голосов
/ 02 февраля 2010

Исправьте запятые:

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 голосов
/ 02 февраля 2010

Я думаю, что вам не хватает «КАК» после окончания дела.

0 голосов
/ 02 февраля 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...