#sql #oracle
Вопрос:
это мой вопрос,
SELECT
MAX(CASE WHEN rownumber='1' THEN DISPOSITON END) AS Dispostion
,MAX(CASE WHEN rownumber='1' THEN SUB_DISPOSITION END) AS SUB_DISPOSITION
,CUST_NAME
,MOBILE_NO
,EMAIL_ID
,LINE_OF_BUSINESS
,PRODUCT_CODE
,REGISTRATION_NUMBER
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY task_id ORDER BY CREATED_DATE ASC) AS rownumber
,a.DISPOSITON
,a.SUB_DISPOSITION
,b.CUST_NAME
,b.MOBILE_NO
,b.EMAIL_ID
,b.LINE_OF_BUSINESS
,b.PRODUCT_CODE
,b.REGISTRATION_NUMBER
FROM CLICK_TO_CALL_AUDIT_LOG a
INNER JOIN IM_DATA b
ON a.task_id=b.task_code
AND UPPER(a.DISPOSITON) = UPPER(:Dis)
AND UPPER(a.SUB_DISPOSITION) in (UPPER(:subDis))
AND a.CREATED_DATE BETWEEN to_timestamp(:before , 'dd-mm-yy hh24:mi:ss')
AND to_timestamp(:current, 'dd-mm-yy hh24:mi:ss')
WHERE b.ALLOCATED_USER IN (:userNameList)
AND b.IS_LATEST = 'Y'
AND b.TASK_STATUS <> 'JUNK LEAD'
AND b.LINE_OF_BUSINESS = :LOB
) R
GROUP BY
CUST_NAME
,MOBILE_NO
,EMAIL_ID
,LINE_OF_BUSINESS
,PRODUCT_CODE
,REGISTRATION_NUMBER;
Комментарии:
1.
where b.ALLOCATED_USER in (:userNameList)
таким образом, вы не сможете пройти фильтр по списку. Что такое тип и содержание:userNameList
?2. Список имен пользователей-это список строкового типа. и я получаю ошибку, в то время как я преобразую все данные в верхний регистр. здесь ВВЕРХУ(a.СУБДИСПОЗИЦИЯ) в (ВВЕРХУ(:субдиспозиции))
Ответ №1:
Этот:
AND UPPER(a.SUB_DISPOSITION) in (UPPER(:subDis))
скорее всего, его следует переписать так, чтобы он представлял строки (вместо, предположительно, списка значений, разделенных запятыми). Что-то вроде этого:
and upper(a.sub_disposition) in (select trim(regexp_substr(upper(:subDis), '[^,] ', 1, level))
from dual
connect by level <= regexp_count(:subDis, ',') 1
)
То же самое относится и к
WHERE b.ALLOCATED_USER IN (:userNameList)
Я предположил, что переменные (такие как userNameList
) выглядят, например 'Scott,Tiger,Wood,King'
. Если это выглядит по-другому, код также должен быть скорректирован.