2015-09-17 4 views
1

Я пытаюсь выяснить, сколько элементов подтверждено в базе данных заказа на поставку.Неожиданные значения 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 
+1

Если значения YES или NO, почему вы используете 'LIKE'? Кроме того, 'RESPONSESTRING = RESPONSESTRING' не будет работать правильно. Вы должны использовать правильные имена таблиц или псевдонимы, иначе вы просто сравниваете значение с самим собой. – GolezTrol

ответ

0

Вы странное преобразование в число (есть какая-то причина для использования подзапрос?)
Надеюсь, что вы можете просто использовать
SUM(DECODE(RESPONSESTRING,'NO',1,0)) AS R2, - сосчитать «NO'-s SUM(DECODE(RESPONSESTRING,'YES',1,0)) AS R3, - для подсчета «YES» -s
В таком случае вы не получите «NULL»

+0

После внесения изменений, я больше не получаю NULL, но теперь я получаю «0» для да и нет. – Abootman

+0

Не могли бы вы разместить содержимое своей таблицы order_confirm и запрос, который вы получите после изменения. Оба значения 0 означают, что столбец RESPONSESTRING не содержит ни «YES», ни «NO»; или этот запрос содержит некоторую ошибку. –

0

ОБНОВЛЕНИЕ: после выполнения еще нескольких исследований базы данных я наткнулся на другой путь t o получить результаты, которые я искал, используя CASE. Я только работаю с базой данных около недели, так что я еще не совсем понял детали.

Смежные вопросы