Сообщение 102, Уровень 15, Состояние 1, Строка 15 Неверный синтаксис рядом с ')' - PullRequest
0 голосов
/ 28 января 2011

Я боролся с этим запросом в течение 2 дней и до сих пор не могу найти, где проблема.

Запрос SQL выглядит следующим образом:

select t2.transno,
  case
  when (Select Count (*)
        From v1
        where v1.transno < v1.transno) > 1 
  then (
    case
    when (Select Top 1 v1.transno
          From v1
          Where v1.transno < v1.transno
          Order By v1.transno Desc)=(T2.transno-1)
    then ' '
    else 'Missing Invoice')
  else ''
  end AS Marker
FROM v1 AS T2

Это дает мне ошибкусообщение:

Msg 102, Level 15, State 1, Line 15 Incorrect syntax near ')'.

Ответы [ 4 ]

1 голос
/ 28 января 2011

Полагаю, вы забыли поставить точку в этом утверждении: else 'Missing Invoice') Попробуйте как else 'Missing Invoice') end

select t2.transno,
  case
  when (Select Count (*)
        From v1
        where v1.transno < v1.transno) > 1 
  then (
    case
    when (Select Top 1 v1.transno
          From v1
          Where v1.transno < v1.transno
          Order By v1.transno Desc)=(T2.transno-1)
    then ' '
    else 'Missing Invoice'
    end )
  else ''
  end AS Marker
FROM v1 AS T2
0 голосов
/ 28 января 2011

v1.transno < v1.transno всегда ложно = ноль строк.

Таким образом, ваш запрос может быть переписан как

SELECT v1.transno, 'Missing Invoice' AS Marker FROM v1

Более серьезно, он может быть выражен более просто как

select t2.transno,
  case
       when foo.maxtransno IS NULL THEN 'Missing Invoice'
       ELSE ' '
  END  AS Marker
FROM
    v1 AS T2
    OUTER APPLY
    (Select MAX(v1.transno) AS maxtransno
          From v1
          Where v1.transno < t2.transno
          HAVING MAX(v1.transno) = T2.transno-1
     ) foo
0 голосов
/ 28 января 2011

Я не знаю, является ли это ответом, но я думаю, что Top 1 должно быть Top (1). (см. Здесь)

0 голосов
/ 28 января 2011

В вашем втором утверждении case отсутствует конец, которого он требует. Попробуйте это:

select t2.transno,
  case
  when (Select Count (*)
        From v1
        where v1.transno < v1.transno) > 1 
  then (
    case
    when (Select Top 1 v1.transno
          From v1
          Where v1.transno < v1.transno
          Order By v1.transno Desc)=(T2.transno-1)
    then ' '
    else 'Missing Invoice') end
  else ''
  end AS Marker
FROM v1 AS T2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...