promedio funcion ejemplos ejemplo datos consultas complejas avg sql-server sum case aggregate

funcion - SQL Server: suma del extracto del caso



funcion avg en mysql (1)

Tengo la siguiente consulta anidada

select sum(c.seats) as countPerfs, b.program, b.Prog_id from #LT_TEMP TableP join C_PROGRAM b on TableP.program_id = b.Prog_id join lt_data c on b.Program = c.program join LTR_BUDGET_REF a on TableP.program_id = a.ProgramID where a.Participants = ''Y'' and fyear = 2016 group by b.Program, b.Prog_id

Devuelve una salida que se ve así:

program_id season program performance workshops artists_sess participants audience 6 2016 LU: NULL NULL NULL NULL NULL 7 2016 NC: NULL NULL NULL NULL NULL 11 2016 AC: NULL NULL NULL NULL NULL 12 2016 PD: NULL NULL NULL NULL NULL 19 2016 MC: NULL NULL NULL NULL NULL

Cada programa tiene una lógica diferente, por lo que si quiero calcular permite decir los participantes. Pero cuando el programa es MC, solo queremos devolver / sumar ciertos datos. Pero cuando el programa es LU, queremos calcular todos los datos. y así. ¿Cómo construyo esa declaración de caso?

por ejemplo, si el programa es MC, queremos sumar c.seats (de lt_data) pero solo donde el precio es = 800. Pero si el programa es LU, queremos sumar asientos para todos los precios. si el programa es PD queremos sumar donde el precio es 800, 500 y 300. Cosas como esa. Es caso por caso, pero no estoy seguro de cómo estructurarlo.

Gracias por adelantado.

Esta es la consulta completa

UPDATE #LT_TEMP SET program = h.Program, participants = h.countPerfs FROM ( select sum(c.seats) as countPerfs, b.program, b.Prog_id from #LT_TEMP TableP join C_PROGRAM b on TableP.program_id = b.Prog_id join lt_data c on b.Program = c.program join LTR_BUDGET_REF a on TableP.program_id = a.ProgramID where a.Participants = ''Y'' and fyear = 2016 group by b.Program, b.Prog_id ) h where h.Prog_id = #LT_TEMP.program_id and h.Prog_id not in (27, 28, 29)


Creo que estás tratando de hacer tu agregación y la lógica CASE a un nivel demasiado alto. Intente hacerlo en una subconsulta de lt_data agrupada por programa:

SELECT c.Prog_id, fyear AS season, c.program, SUM(l.seats) AS countPerfs FROM #LT_TEMP t JOIN C_PROGRAM c ON t.program_id = c.Prog_id JOIN (SELECT fyear, program, SUM(CASE WHEN program = ''mc:'' AND price = 800 THEN seats WHEN program = ''lu:'' THEN seats WHEN program = ''pd:'' and price in (300, 500, 800) then seats ELSE seats END) AS calc FROM lt_data GROUP BY fyear, program) l ON c.Program = l.program JOIN LTR_BUDGET_REF b ON TableP.program_id = b.ProgramID WHERE b.Participants = ''Y'' AND fyear = @fyear GROUP BY c.Prog_id, fyear, c.Program

El ejemplo de sintaxis relevante en la definición de MS es: expresión CASE buscada:

CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END