Pregunta

Tengo una base de datos con el siguiente esquema:

ID   PositionId    LeagueId
1        4            5
3        4            5
3        8            5
4        1            6

Tengo esta consulta SQL en Access:

 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

Si sólo uso el lado izquierdo de la Tener, es decir:

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

voy a conseguir resultados (1 LeagueId 5). Si uso el lado derecho de la Tener, es decir:

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

I también tendrá un resultado (LeagueId 5), pero ambos juntos (como anteriormente) no da resultados.

¿Fue útil?

Solución

Su tema es porque la suma no puede satisfacer tanto a los predicados que tienen, por lo que trate de usar un OR:

  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

Otros consejos

No es usted la agrupación por positionid? Así que para cada positionid que está pidiendo la suma para que sea positionid> 0 cuando el id es 4 Y 8 al mismo tiempo. es posible? ¿Quieres un quirófano? Si está utilizando una consulta diferente?

GROUP BY LeagueID, por ejemplo?

Se puede escribir una versión muy simplificada de esta consulta por ejemplo.

SELECT DISTINCT 8 AS PositionId
  FROM Lineups 
 WHERE PositionId = 8 
UNION ALL
SELECT DISTINCT 4
  FROM Lineups 
 WHERE PositionId = 4
HAVING COUNT(*) > 1;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top