В вашем вопросе несколько требований, позвольте мне рассмотреть их по одному.
CLIENT_SCREENING_TOOLS.TEST_NAME! = 'NULL'
Это неверно, NULL
не является строкой для сравнения с использованием оператора !=
. Правильный способ - использовать IS NOT NULL
:
WHERE CLIENTS.LAST_NAME != 'TEST'
AND CLIENTS.LAST_NAME IS NOT NULL
AND CLIENT_SCREENING_TOOLS.TEST_NAME IS NOT NULL
формат даты: 2020-03-14 17: 38: 00
DATE
doesn ' У меня нет формата. Вы видите то, как оно отображается в соответствии с вашим locale-specific NLS settings
.
Вы закодировали выражение CASE
так, чтобы оно имело NULL
значение в виде строки в части ELSE
:
CASE
WHEN CLIENT_SCREENING_TOOLS.TEST_NAME = 'Patient Health Questionnaire (PHQ-9)'
THEN 'D - Depression Screen'
WHEN CLIENT_SCREENING_TOOLS.TEST_NAME = 'Resident CAGE-AID Questionnaire'
THEN 'B - Substance Abuse Screen'
ELSE 'NULL' --> This is why you see NULL in your output
END AS SERVICE
Если выражение THEN
не выполняется, оно будет отображать 'NULL'
в виде строки.
Вместо этого вы можете просто создать условие фильтра как:
AND CLIENT_SCREENING_TOOLS.TEST_NAME IN
(
'Patient Health Questionnaire (PHQ-9)' ,
'Resident CAGE-AID Questionnaire'
)
Другая часть, с которой мне нужна помощь, это получение данных только за последние месяцы
Чтобы получить данные LAST MONTH
, вы можете использовать следующее условие:
AND SCREEN_DATE
BETWEEN
add_months(trunc(sysdate,'mm'),-1)
AND last_day(add_months(trunc(sysdate,'mm'),-1))
Например,
alter session set nls_date_format = 'YYYY-MM-DD';
SELECT
add_months(trunc(sysdate, 'mm'), - 1) "start",
last_day(add_months(trunc(sysdate, 'mm'), - 1)) "end"
FROM
dual;
start end
---------- ----------
2020-04-01 2020-04-30