sql sql-server aggregate correlated-subquery

SQL Server "no puede realizar una función agregada en una expresión que contenga un agregado o una subconsulta", pero Sybase puede



sql-server aggregate (1)

Una opción es colocar la subconsulta en una LEFT JOIN :

select sum ( t.graduates ) - t1.summedGraduates from table as t left join ( select sum ( graduates ) summedGraduates, id from table where group_code not in (''total'', ''others'' ) group by id ) t1 on t.id = t1.id where t.group_code = ''total'' group by t1.summedGraduates

Quizás una mejor opción sería usar SUM con CASE :

select sum(case when group_code = ''total'' then graduates end) - sum(case when group_code not in (''total'',''others'') then graduates end) from yourtable

Demo SQL Fiddle con ambos

Este problema se ha discutido anteriormente, pero ninguna de las respuestas aborda mi problema específico porque estoy tratando con diferentes cláusulas donde se selecciona la parte interna y externa Esta consulta se ejecutó bien en Sybase, pero muestra el error en el título de esta publicación cuando se ejecuta en SQL Server. La consulta es complicada, pero el esquema general de la consulta es:

select sum ( t.graduates - ( select sum ( t1.graduates ) from table as t1 where t1.id = t.id and t1.group_code not in (''total'', ''others'' ) ) ) from table as t where t.group_code = ''total''

A continuación se describe la situación que estoy tratando de resolver:

  • todos los códigos de grupo representan razas excepto ''total'' y ''otros''
  • código de grupo ''total'' representa el total de graduados de todas las razas
  • sin embargo, faltan varias carreras, por lo que los recuentos de graduados de carreras pueden no sumar el total de recuentos
  • Este dato faltante es lo que necesita ser calculado

¿Hay alguna forma de volver a escribir esto utilizando tablas derivadas o uniones para obtener los mismos resultados?

Actualización: creé datos de muestra y 3 soluciones a mi problema específico (2 influenciadas por sgeddes). El que agregué implica mover la subconsulta correlacionada a una tabla derivada en la cláusula FROM. ¡Gracias por la ayuda chicos!