Как я могу задать этот запрос в SQL? - PullRequest
0 голосов
/ 03 мая 2019

Для каждого отдела просмотрите имя исследователей и количество контрактов, заключенных исследователями, которые несут исключительную ответственность за контракты с «importi» на сумму более 100000 долларов США и «aziende» с типом дескриптора «TypeA =« Grandi Aziende » .

Это описание базы данных:

DIPARTIMENTO(CodD*, NomeD, Settore-Scientifico, Università)
RICERCATORE(CodR*, Nome, Cognome, DataNascita, CodD, DataPresaServizio)
AZIENDA(CodA*, NomeA, TipoA, Citt`a, Settore-Industriale)
CONTRATTO-DI-RICERCA(CodR-ResponsabileScientifico*, CodA*, DataInizio*,
Durata, Importo)

Это мой вопрос:

SELECT Nome, Count(R1.CodR) AS 'Numero Contratti'
FROM RICERCATORE AS R1,DIPARTIMENTO AS D1
WHERE R1.CodD = D1.CodD
AND R1.CodR IN (SELECT R2.CodR
                FROM RICERCATORE AS R2, CONTRATTO-DI-RICERCA AS C1
                WHERE R2.CodR = C1.CodR-ResponsabileScientifico
                AND R2.CodR NOT IN (SELECT C2.CodR-ResponsabileScientifico 
                                    FROM CONTRATTO-DI-RICERCA AS C2
                                    WHERE  C2.Importo <= 100000
                                    OR C2.CodA IN (SELECT A1.CodA
                                                      FROM AZIENDA AS A1
                                                      WHERE A1.TipoA <> 
                                                   'Grande Azienda')))
GROUP BY D1.CodD

Это правильно? Есть ли более простой способ сформулировать запрос?

1 Ответ

0 голосов
/ 03 мая 2019

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

SELECT r.Nome, Count(Distinct r.CodR) 'Numero Contratti'
FROM CONTRATTO-DI-RICERCA c
INNER JOIN RICERCATORE r ON c.CodR-ResponsabileScientifico=r.CodR
INNER JOIN AZIENDA a ON c.CodA=a.CodA
INNER JOIN DIPARTIMENTO d ON r.CodD=d.CodD
WHERE c.Implorto > 100000
AND a.TipoA='Grande Azienda'
GROUP BY r.Nome
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...