Я пытаюсь выяснить, сколько элементов подтверждено в базе данных заказа на поставку.Неожиданные значения NULL
База данных содержит «да» или «нет», которые необходимо преобразовать в номера, чтобы я мог видеть общее количество подтвержденных или нет элементов.
Типы данных: varchar2
. Не должно быть NULL в столбце R2, а R3 не должно равняться RESPONSE_COUNT. Я использую ITEMID, чтобы добавить общие ответы каждого элемента.
Любые идеи о том, как исправить это?
Запрос:
SELECT
POSITION_NAME,
ORDER_NAME,
COUNT(SELECT RESPONSESTRING FROM ORDER_CONFIRM WHERE (RESPONSESTRING = RESPONSESTRING) AND (RESPONSESTRING LIKE 'NO')) AS R2, -- converting the string "no" to a number
COUNT(SELECT RESPONSESTRING FROM ORDER_CONFIRM WHERE (RESPONSESTRING = RESPONSESTRING) AND (RESPONSESTRING LIKE 'YES')) AS R3, -- converting the string "yes" to a number
TO_NUMBER(COUNT(DISTINCT ITEMID)) AS RESPONSE_COUNT
FROM ORDER_CONFIRM
WHERE ORDER_NAME LIKE 'XX.XX.MMYY'
AND RESPONSESTRING IS NOT NULL
HAVING TO_NUMBER(COUNT(DISTINCT ITEMID)) >= '5'
GROUP BY
POSITION_NAME,
ORDER_NAME
ORDER BY POSITION_NAME DESC;
Result:
POSITION_NAME | ORDER_NAME | R2 | R3 | RESPONSE_COUNT
======================================================
POSITION A | XX.XX.MMYY | (null) | 5 | 5
POSITION B | XX.XX.MMYY | (null) | 5 | 5
POSITION C | XX.XX.MMYY | (null) | 8 | 8
POSITION D | XX.XX.MMYY | (null) | 10 | 10
Если значения YES или NO, почему вы используете 'LIKE'? Кроме того, 'RESPONSESTRING = RESPONSESTRING' не будет работать правильно. Вы должны использовать правильные имена таблиц или псевдонимы, иначе вы просто сравниваете значение с самим собой. – GolezTrol