2016-12-15 2 views
0

У меня есть следующие таблицы в ДОСТУПЕподсчета записей на трех совместных записей

 
Table.KnowledgeArea | Table.CentralData | Table.AppointedHrs 
--------------------+-------------------+------------------- 
AreaKnowKey   | IdKey(key)  | ApointedHrsKey 
AreaKnowDescr  | AreaKnowKey  | AppointedHrsDescr 
        | AppointedHrsKey | 
        | RFC    | 

как вы можете видеть CentralData связано с KnowledgeArea и AppointedHrs

и у меня есть следующий SQL-запрос

SELECT KnowledgeArea.AreaKnowDescr, AppointedHrs.AppointedHrsDescr, CentralData.RFC 
FROM AppointedHrs AS HRSNOMB, AppointedHrs 
INNER JOIN 
(KnowledgeArea INNER JOIN CentralData 
    ON KnowledgeArea.AreaKnowKey = CentralData.AreaKnowKey) 
ON AppointedHrs.ApointedHrsKey = CentralData.ApointedHrsKey; 

, который производит следующий обзорный стол

 
AreaKnowDescr  | AppointedHrsDescr | RFC 
---------------------+-------------------+----------- 
Ingeniería Aplicada. | Asignatura  | CUES730901 
Ingeniería Aplicada. | Asignatura  | CUES730901 
Ingeniería Aplicada. | Asignatura  | CUES730901 
Ingeniería Aplicada. | Asignatura  | CUES730901 
Ingeniería Aplicada. | Asignatura  | CUES730901 
Ingeniería Aplicada. | Asignatura  | CUES730901 
Ciencias Básicas. | Asignatura  | CUGM700216 
Ciencias Básicas. | Asignatura  | CUGM700216 

, но я хочу что-то вроде

 
KnowledgeArea  | AppointedHrsDescr | Number of RFC 
--------------------+-------------------+-------------- 
Ingeniería Aplicada | Asignatura  | 10 
Ingeniería Aplicada | Tiempo Parcial | 10 
Ingeniería Aplicada | Tiempo Completo | 10 
Ciencias básicas | Asignatura  | 5 
Ciencias básicas | Tiempo Parcial | 5 
Ciencias básicas | Tiempo Completo | 5 

Я знаю, что я должен использовать функцию подсчета. У меня есть счет записи, соединяющей две таблицы, но я не смог произвести то, что хочу.

Может ли кто-нибудь помочь мне, чтобы получить предложение SQL-предложения?

большое спасибо ...

+0

Почему это с тегом 'mysql'? – shmosel

ответ

0

Вы перечислили таблицу AppointedHrs здесь дважды:

FROM AppointedHrs AS HRSNOMB, AppointedHrs 

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

Для того, чтобы подсчитать количество RFC для каждого района и назначенный час, вы должны сгруппироваться по этим двум.

SELECT KnowledgeArea.AreaKnowDescr, AppointedHrs.AppointedHrsDescr, COUNT(*) 
FROM AppointedHrs 
INNER JOIN 
(KnowledgeArea INNER JOIN CentralData 
    ON KnowledgeArea.AreaKnowKey = CentralData.AreaKnowKey) 
ON AppointedHrs.ApointedHrsKey = CentralData.ApointedHrsKey 
GROUP BY KnowledgeArea.AreaKnowDescr, AppointedHrs.AppointedHrsDescr 
ORDER BY KnowledgeArea.AreaKnowDescr, AppointedHrs.AppointedHrsDescr; 

И в случае могут быть повторяющиеся описания (которые я бы не рекомендовал), вы должны были бы поставить идентификаторы в предложении GROUP BY, чтобы получить их разделяют в результатах.

0

Это не ответ. Я просто хочу показать альтернативные способы написания одного и того же запроса.


Это часто является хорошей идеей, чтобы объединить первый и только затем присоединиться. В стандартном SQL:

SELECT 
    ka.AreaKnowDescr, 
    ah.AppointedHrsDescr, 
    cd.RFCs 
FROM 
(
    SELECT AreaKnowKey, ApointedHrsKey, COUNT(*) AS RFCs 
    FROM CentralData 
    GROUP BY AreaKnowKey, ApointedHrsKey 
) cd 
JOIN KnowledgeArea ka ON ka.AreaKnowKey = cd.AreaKnowKey 
JOIN AppointedHrs ah ON ah.ApointedHrsKey = cd.ApointedHrsKey 
ORDER BY ka.AreaKnowDescr, ah.AppointedHrsDescr; 

В MS Access то же самое будет выглядеть немного неуклюжий и менее читаемыми для его потребности в скобках на вливается.

И здесь то же самое, не присоединяется:

SELECT 
    (
    SELECT ka.AreaKnowDescr 
    FROM KnowledgeArea ka 
    WHERE ka.AreaKnowKey = cd.AreaKnowKey 
) AS AreaKnowDescr, 
    (
    SELECT ah.AppointedHrsDescr 
    FROM AppointedHrs ah 
    WHERE ah.ApointedHrsKey = cd.ApointedHrsKey 
) AS AppointedHrsDescr, 
    COUNT(*) AS RFCs 
FROM CentralData cd 
GROUP BY AreaKnowKey, ApointedHrsKey 
ORDER BY AreaKnowDescr, AppointedHrsDescr; 
Смежные вопросы