Estás tratando de
sumar conceptos que deben estar agrupados
sin agruparlos.
Es tan simple como eso.
Cita: Quisiera saber por programa cuantos SI vinieron y Cuantos NO y que valor suma los que si y los que No
En esa descripción lo que expresas es que necesitas saber cuántos SI y NO hay
por cada programa diferente, y eso sólo ocurre cuando AGRUPAS.
El concepto de agrupación o agregación es de manual. Lo puedes encontrar en cualquier tutorial básico, sin necesidad de recurrir al manual de referencia:
MySQL Con Clase: Agrupar filas Tema 4. Las consultas de resumen (II) http://dev.mysql.com/doc/refman/5.7/...modifiers.html
En tu caso es simple:
Código SQL:
Ver originalSELECT pr.descripcion_programa, SUM(IF(dg.asistenciad = 'Si', 1, 0)) Asistencia,
SUM(IF(dg.asistenciad = 'No', 1, 0)) NoAsistencia, SUM(pr.valor) Total
FROM tb_detalle_grupos dg
INNER JOIN tb_grupos gr ON gr.tb_id_grupos=bdg.tb_id_grupos
INNER JOIN tb_programas pr ON dg.programas_id = pr.programas_id
WHERE fecha BETWEEN '2016-03-01' AND '2016-03-12'
GROUP BY pr.descripcion_programa ASC
Hay un par de puntos oscuros en tu post: 1) No se ve como se relaciona la tabla de programas con el resto, así que estoy haciendo una suposición; 2) No queda claro por qué sumas siempre el valor, aun cuando no hubo asistencia. ¿No deberías sumar solo a los asistentes?
Finalmente: No uses JOIN implícito, es ineficiente y puede generar errores de resultados si no se determina la relación. Y NUNCA lo uses sin especificar cuál es la forma en que se relacionan las tablas; te olvidaste de una y eso puede sacar resultados basura.