tengo la mesa
| WorkerID | ProjectName | Role | |----------|-------------|--------| | 1 | Test | Leader | |----------|-------------|--------| | 4 | Test | Worker | |----------|-------------|--------| | 2 | Stuff | Leader | |----------|-------------|--------| | 3 | Proj | Worker |y ahora quiero enumerar todos los ProjectName donde no hay un líder específico como este:
| ProjectName | |-------------| | Proj |En este momento, solo sé cómo filtrar todos los ProjectNames con Leaders, ¡pero no la forma de filtrarlos de otra manera!
Cualquier ayuda es apreciada :)
Una forma de hacerlo es con la agregación y la condición en la cláusula HAVING :
SELECT ProjectName FROM tablename GROUP BY ProjectName HAVING SUM(Role = 'Leader') = 0;(FYI: estoy más familiarizado con PostgreSQL, así que no estoy seguro de si esto es completamente transferible)
Haría una subconsulta para identificar los proyectos que tienen líderes y, en su consulta principal, haría una instrucción WHERE que seleccione todos los proyectos que NOT IN la subconsulta.
SELECT ProjectName FROM Table WHERE ProjectName NOT IN ( SELECT ProjectName FROM Table WHERE Role = 'Leader' )