需要帮助消除空数据和检索上个月的记录

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