SQL: атрибут соответствует двум различным условиям одновременно - PullRequest
0 голосов
/ 02 октября 2019

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

Я пытался использовать пересечение, но я не получил никаких совпадений. Но в моей таблице есть один драйвер, который соответствует этим условиям.

SELECT s.NumeSofer 
  FROM Soferi s 
    INNER JOIN contraventii c ON s.idSofer=c.idSofer 
    INNER JOIN localitati l ON c.idLocContr=l.idLoc 
      WHERE l.DenLoc IN ('Iasi', 'Rosiori') AND l.Jud IN ('IS', 'NT');

INTERSECT

SELECT s.NumeSofer 
  FROM Soferi s 
    INNER JOIN contraventii c ON s.idSofer=c.idSofer 
    INNER JOIN localitati l ON c.idLocContr=l.idLoc 
      WHERE l.DenLoc='Rosiori' AND l.Jud='NT';

1 Ответ

0 голосов
/ 02 октября 2019

Сделайте GROUP BY вместо этого. Используйте выражения case для условного агрегирования:

SELECT s.NumeSofer, count(distinct l.DenLoc) as totcount,
       count(case when l.DenLoc='Rosiori' then 1 end) as Rosioricount,
       count(case when l.DenLoc='Iasi' then 1 end) as Iasicount
FROM Soferi s
INNER JOIN contraventii c ON s.idSofer=c.idSofer
INNER JOIN localitati l ON c.idLocContr=l.idLoc
WHERE (l.DenLoc='Rosiori' AND l.Jud='NT')
   OR (l.DenLoc='Iasi' AND l.Jud='IS')
GROUP BY s.NumeSofer
ORDER BY totcount desc

Любые строки с totcount = 2?

Чтобы получить только драйверы с обоими DenLoc, добавьте предложение HAVING:

SELECT s.NumeSofer, count(distinct l.DenLoc) as totcount,
       count(case when l.DenLoc='Rosiori' then 1 end) as Rosioricount,
       count(case when l.DenLoc='Iasi' then 1 end) as Iasicount
FROM Soferi s
INNER JOIN contraventii c ON s.idSofer=c.idSofer
INNER JOIN localitati l ON c.idLocContr=l.idLoc
WHERE (l.DenLoc='Rosiori' AND l.Jud='NT')
   OR (l.DenLoc='Iasi' AND l.Jud='IS')
GROUP BY s.NumeSofer
HAVING count(distinct l.DenLoc) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...