Здравствуйте, вы можете мне помочь? я получаю сообщение об ошибке «Отсутствует ключевое слово». См. код ниже. Заранее спасибо.
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
COUNT(UNIQUE...)
должно быть COUNT(DISTINCT ...)
@GMB Спасибо, я попытаюсь заменить уникальное на отличное
Одним из лучших навыков разработчика sql является искусство отладки sql. Вы можете отлаживать недопустимые синтаксические ошибки, извлекая отдельные части по одной, пока все не скомпилируется. Это поможет вам определить проблемный синтаксис. В вашем конкретном случае есть ряд синтаксических ошибок, а не одна. Попробуйте отладить его самостоятельно, и вы приобретете ценный навык отладки.
@SamM Спасибо, я продолжу попытки, из-за крайнего срока трудно терпеть
Это не имеет смысла:
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
Линхоф, вы абсолютно правы, я уже на шаг впереди, но получаю мало ошибок, но ваше заявление серьезно полезно
Вам не хватает запятой, здесь:
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
.
CASE
синтаксис:CASE WHEN ... THEN ... END