需要帮助消除空数据和检索上个月的记录
Need help eliminating Null data and retrieving last months records
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:00。
enter image description here
如果对我的格式有任何提示,请告诉我,这对我来说是新的。
当前代码:
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
the date format is 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'
)
The other part that I need help with is pulling just last months data
要获取 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
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:00。
enter image description here
如果对我的格式有任何提示,请告诉我,这对我来说是新的。
当前代码:
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
the date format is 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'
)
The other part that I need help with is pulling just last months data
要获取 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