2016-03-09 16 views
0

Я пытаюсь получить счет C_ST с '0' для каждого Abonent, но не знаю как. Пытался найти решение, но ничего не работает ..Небольшая задача SQL с агрегатными функциями

Структура базы данных:

The Structure of Database

QRY_TYPE (ID - уникальный идентификатор типа, С_NAME - имя типа, C_AB_REF - ссылка аноним, который обрабатывает эти типы сообщений).

ST_ABONENTS (ID - уникальный идентификатор, С_NAME - имя)

QRY_QUEUE (ID - уникальный идентификатор, С_IN_TIME - дата и время написания MSG в таблицу, C_EXEC_TIME - дата и время обработки сбщ , C_ST - статус обработки (null - did not, 1 - successl, 0 - ошибка с обработкой), C_QRY_TYPE - ссылка для типа запроса).

Вот один из моих попыток, его до сих пор не работает

SELECT ST_ABONENTS.C_NAME AS "ABONENTNAME",COUNT(QRY_QUEUE.C_ST) AS "CNT" 
FROM ST_ABONENTS, QRY_QUEUE 
WHERE QRY_QUEUE.C_ST=0 
GROUP BY ST_ABONENTS.C_NAME 
HAVING COUNT(QRY_QUEUE.C_ST)>0; 

Результат должен выглядит следующим образом

Result

+0

Oracle или MySQL? Не помещайте те продукты, которые не задействованы. (И у одного из этих двух есть немного странная группа по поведению ...) – jarlh

+0

oracle, уже нашли решение, thx – Alexey

ответ

0

Это вернет подсчитывать каждый Абонентам с c_st = 0

select a.c_name as abonentname, count(*) as cnt 
from st_abonents a 
inner join qry_type qt on a.id = qt.c_ab_ref 
inner join qry_queue qq on qt.id = qq.c_qry_type 
where qq.c_st = 0 
group by a.c_name 
+0

спасибо большое! оно работает!))) – Alexey

1

Вы отсутствующего присоединительных условия, которые касаются таблиц.

SELECT a.c_name AS ABONENTNAME, COUNT(*) AS CNT 
FROM ST_ABONENTS AS a 
JOIN QRY_TYPE AS t ON a.ID = t.C_AB_REF 
JOIN QRY_QUEUE AS q ON q.C_QRY_TYPE = t.ID 
WHERE q.C_ST = 0 
GROUP BY ABONENTNAME 
+0

спасибо! он работает – Alexey

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