Отсутствует ключевое слово ORA00905

Здравствуйте, вы можете мне помочь? я получаю сообщение об ошибке «Отсутствует ключевое слово». См. код ниже. Заранее спасибо.

SELECT Datum, Wdomain, Lgstkproc, Username,
Case when LGSTKPROC = 'NAVUL'
         COUNT (unique username '-'palnumber end nr_pal_per_user_navul,
Case when LGSTKPROC !=‘NAVUL’
         COUNT (unique username '-'palnumber end nr_pal_per_user_veplaatst
From (
SELECT USERNAME, RES, RESTYPE, WDOMAIN, LGSTKPROC,  LOCNAME, ENDLOCNAME, PALNUMBER, TRUNC(SYSDATE-1) datum 
FROM TransportStock$VW TS
WHERE TRUNC(timestamp)<TRUNC(sysdate)-1
AND res NOT LIKE '%CONVS%'
)
Group by Username, Datum,  Lgstkproc, Wdomain
CASE синтаксис: CASE WHEN ... THEN ... END
GMB 06.04.2019 23:49
COUNT(UNIQUE...) должно быть COUNT(DISTINCT ...)
GMB 06.04.2019 23:50

@GMB Спасибо, я попытаюсь заменить уникальное на отличное

Jayson Bradford 06.04.2019 23:52

Одним из лучших навыков разработчика sql является искусство отладки sql. Вы можете отлаживать недопустимые синтаксические ошибки, извлекая отдельные части по одной, пока все не скомпилируется. Это поможет вам определить проблемный синтаксис. В вашем конкретном случае есть ряд синтаксических ошибок, а не одна. Попробуйте отладить его самостоятельно, и вы приобретете ценный навык отладки.

Sam M 06.04.2019 23:52

@SamM Спасибо, я продолжу попытки, из-за крайнего срока трудно терпеть

Jayson Bradford 06.04.2019 23:55
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
5
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это не имеет смысла:

Case when LGSTKPROC = 'NAVUL'
     COUNT (unique username '-'palnumber end nr_pal_per_user_navul,

Я предполагаю, что вы хотите:

count(distinct case when LGSTKPROC = 'NAVUL'
                    then username || '-' || palnumber
               end) as nr_pal_per_user_navul

Линхоф, вы абсолютно правы, я уже на шаг впереди, но получаю мало ошибок, но ваше заявление серьезно полезно

Jayson Bradford 07.04.2019 00:19
Ответ принят как подходящий

Вам не хватает запятой, здесь:

SELECT datum,
       wdomain,
       lgstkproc,
       username,
       COUNT (DISTINCT CASE WHEN lgstkproc = 'NAVUL' THEN 
                                 username || '-' || palnumber
                       END) AS nr_pal_per_user_navul,                --> comma missing here
       COUNT (DISTINCT CASE WHEN lgstkproc != 'NAVUL' THEN 
                                 username || '-' || palnumber
                       END) AS nr_pal_per_user_veplaatst
FROM (SELECT username,
             res,
             restype,
             wdomain,
             lgstkproc,
             locname,
             endlocname,
             palnumber,
             trunc(SYSDATE - 1) datum
      FROM transportstock$vw ts
      WHERE trunc(timestamp) < trunc(SYSDATE) - 1
        AND res NOT LIKE '%CONVS%'
     )
GROUP BY username,
         datum,
         lgstkproc,
         wdomain

Все становится намного яснее, если вы правильно форматируете код, который пишете.

Кроме того, эти COUNT не имеют особого смысла — оба CASE выбирают одно и то же значение, независимо от значения lgstkproc.

Другие вопросы по теме