2010-08-09 13 views
5

tengo la siguiente instrucción SQL:Conde SQL en la cláusula

SELECT  [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME, [lp.PositionId] 
FROM   (Leagues l INNER JOIN 
        Lineups lp ON l.LeagueId = lp.LeagueId) 
WHERE  (lp.PositionId = 1) OR 
        (lp.PositionId = 3) OR 
        (lp.PositionId = 2) 

Lo que realmente necesito es conseguir que las filas en las que la cuenta de la posición es mayor que un número. Algo como:

SELECT  [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME, [lp.PositionId] 
FROM   (Leagues l INNER JOIN 
        Lineups lp ON l.LeagueId = lp.LeagueId) 
WHERE  Count(lp.PositionId = 1) > 2 OR 
        Count(lp.PositionId = 3) > 6 OR 
        Count(lp.PositionId = 2) > 3 

¿Hay alguna manera de hacer esto en SQL?

+0

lo tanto, estoy usando la solución de Cade Roux abajo, pero ¿alguien sabe por qué, cuándo Cambio el TENER de una declaración O a una instrucción Y, ¿obtengo cero resultados? Si solo uso una declaración SUMA (CASE ..), obtengo resultados, pero si combino dos afirmaciones que funcionen, obtendré cero resultados. –

Respuesta

9

¿Qué tal esto ?:

SELECT  [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME 
FROM   (Leagues l INNER JOIN 
        Lineups lp ON l.LeagueId = lp.LeagueId) 
GROUP BY [l.LeagueId], [l.LeagueName] 
HAVING  SUM(CASE WHEN lp.PositionId = 1 THEN 1 ELSE 0 END) > 2 OR 
        SUM(CASE WHEN lp.PositionId = 3 THEN 1 ELSE 0 END) > 6 OR 
        SUM(CASE WHEN lp.PositionId = 2 THEN 1 ELSE 0 END) > 3 
7

teniendo es la palabra clave que está buscando:

SELECT  [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME, [lp.PositionId] 
FROM   (Leagues l INNER JOIN 
        Lineups lp ON l.LeagueId = lp.LeagueId) 
GROUP BY lp.PositionId, l.LeagueName 
HAVING lp.PositionId = 1 AND COUNT(*) > 2 
     OR lp.PositionId = 2 AND COUNT(*) > 3 
     OR lp.PositionId = 3 AND COUNT(*) > 6