SELECT
CLIENTS.LAST_NAME,
CLIENTS.FIRST_NAME,
CLIENTS.DOB,
CLIENTS.ALT_ID,
CLIENT_SCREENING_TOOLS.SCREEN_DATE,
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'
END AS SERVICE
FROM
CLIENTS
JOIN
CLIENT_SCREENING_TOOLS ON CLIENTS.SHISID = CLIENT_SCREENING_TOOLS.SHISID
WHERE
CLIENTS.LAST_NAME != 'TEST'
AND CLIENT_SCREENING_TOOLS.TEST_NAME != 'NULL'
我觉得我已经很接近了,但是我的where语句没有正常工作。我的服务列仍然在填充NULL数据。我需要帮助的另一个部分是只拉出上个月的数据,如果你看图片,日期格式是2020-03-14 17:38。如果你看图片,日期格式是2020-03-14 17:38:00。
如果对我的格式有什么建议,请告诉我,这对我来说是新的。
现在的代码。
SELECT CLIENTS.LAST_NAME,
CLIENTS.FIRST_NAME,
CLIENTS.DOB,
CLIENTS.ALT_ID,
CLIENT_SCREENING_TOOLS.SCREEN_DATE,
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 CLIENT_SCREENING_TOOLS.TEST_NAME
END AS SERVICE
FROM CLIENTS
JOIN CLIENT_SCREENING_TOOLS
ON CLIENTS.SHISID = CLIENT_SCREENING_TOOLS.SHISID
WHERE CLIENTS.LAST_NAME != 'TEST'
AND CLIENT_SCREENING_TOOLS.TEST_NAME IN
(
'Patient Health Questionnaire (PHQ-9)',
'Resident CAGE-AID Questionnaire'
)
AND SCREEN_DATE
BETWEEN
add_months(trunc(sysdate,'mm'),-1)
AND last_day(add_months(trunc(sysdate,'mm'),-1))
这是代码之后
在你的问题中,有多个要求,让我逐一解决。
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
没有任何格式。你看到的是它的显示方式,根据你的 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