Вопрос

У меня есть база данных со следующей схемой:

ID PositeId LeagugeID 1 4 5 3 4 5 3 8 5 4 1 6

У меня есть этот запрос SQL в доступе:

 SELECT lp.PositionId
 FROM Leagues l 
 INNER JOIN Lineups lp ON (l.LeagueID = lp.LeagueId) 
 GROUP BY PositionId
 HAVING sum(iif(lp.PositionId = 4,1,0)) > 1 AND sum(iif(lp.PositionId = 8,1,0)) > 0

Если я использую только левую сторону имеющего, т. Е.

 HAVING sum(iif(lp.PositionId = 4,1,0)) > 1

Я получу 1 результаты (LeagugeID 5). Если я использую правую часть имеющего, т. Е.

 HAVING sum(iif(lp.PositionId = 8,1,0)) > 0

Я также получу один результат (LeagugeID 5), но оба вместе (как указано выше) дают никаких результатов.

Это было полезно?

Решение

Ваша проблема заключается в том, что сумма не может удовлетворить как предикаты, поэтому попробуйте использовать или:

  SELECT lp.PositionId
    FROM Leagues l 
    JOIN Lineups lp ON (l.LeagueID = lp.LeagueId) 
GROUP BY PositionId
  HAVING SUM(iif(lp.PositionId = 4,1,0)) > 1 OR SUM(iif(lp.PositionId = 8,1,0)) > 0

Другие советы

Вы не группируете позиционирование? Таким образом, для каждой позиции вы задаете сумму для того, чтобы позиционировать быть> 0, когда идентификатор 4 и 8 одновременно. Это возможно? Вы хотите или? Если вы используете другой запрос?

GROUP BY LeagueID, например?

Вы можете написать много упрощенной версии этого запроса, например,

SELECT DISTINCT 8 AS PositionId
  FROM Lineups 
 WHERE PositionId = 8 
UNION ALL
SELECT DISTINCT 4
  FROM Lineups 
 WHERE PositionId = 4
HAVING COUNT(*) > 1;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top