2015-11-16 2 views
0

Я создаю довольно большой набор табличных данных. В этих данных у меня есть сотрудники и их итоговые суммы по отношению к общим суммам компании. У меня возникла проблема в том, что я использую CTE, и одно из моих выражений подсчитывает количество определенного элемента. Счетчик ничего не возвращает и включив это выражение в окончательный запрос, весь результат будет пустым. Я уверен, что я что-то просто не хватает здесь:CTE с пустыми выражениями

... 
COMPANY_TOTAL_A(A) AS 
(
SELECT NVL(COUNT(ITEM),0) 
FROM COMPANY_TOTALS_FINAL 
WHERE ITEM = 'A' 
GROUP BY ITEM 
), 
... 

Этот запрос ничего не возвращает, и, когда я использую его в моем окончательном запросе весь результирующий набор является пустым. Если я исключу его, я получу все строки, которые я ожидаю. Это похоже на это?

SELECT DISTINCT C.ID, 
C.NAME, 
P.LOCATION, 
... 
NVL(T.A, 0) 
... 
FROM COMPANY C 
INNER JOIN PLACE P 
ON P.P_ID = C.P_ID, 
... 
COMPANY_TOTAL_A T; 

В качестве значения Tthis имеет отношение ко всем сотрудникам, я ожидал, что это просто вернуть общую компанию для того, когда товар находится в классе A. Даже если это 0, я думал, что 0 будет возвращено?

ответ

2

Группировка по той же колонке, на которую вы рассчитываете, бесполезна. Вы хотите простой:

SELECT count(*) 
FROM company_totals_final 
WHERE item = 'A' 

count(item) подсчитывает все строки, в которых элемент не является пустым, но условие будет ITEM = 'A' уже удалить эти строки в любом случае. Так что это тоже не нужно.

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