Hola Jesús, la única manera que te salga 0 en la parte de abajo es q para un dia se de:
Cantidad Si = 0
Cantidad No = 0
Podrias hacer lo siguiente:
Código sql:
Ver originalDECLARE @TABLE TABLE ( fecha datetime, condicional CHAR(2))
INSERT INTO @TABLE VALUES( dateadd(DAY, -1, getdate()) , 'd' )
INSERT INTO @TABLE VALUES( dateadd(DAY, -1, getdate()) , 'ns' )
INSERT INTO @TABLE VALUES( dateadd(DAY, -1, getdate()) , 'f' )
SELECT DISTINCT *,
[%_si] = (cont1 / ((
CASE
WHEN cont1+cont2 = 0 THEN -1
ELSE cont1+cont2
END
) * 1.0))*100,
[%_no] = (cont2 / ((
CASE
WHEN cont1+cont2 = 0 THEN -1
ELSE cont1+cont2
END
) * 1.0))*100
FROM (
SELECT anio = YEAR(t.fecha),
mes = MONTH(t.fecha),
dia = DAY(t.fecha),
cont1 = (SELECT COUNT(t1.condicional) FROM @TABLE t1
WHERE YEAR(t1.fecha) = YEAR(t.fecha) AND
MONTH(t1.fecha) = MONTH(t.fecha) AND
DAY(t1.fecha) = DAY(t.fecha) AND
condicional = 'si' ),
cont2 = (SELECT COUNT(t1.condicional) FROM @TABLE t1
WHERE YEAR(t1.fecha) = YEAR(t.fecha) AND
MONTH(t1.fecha) = MONTH(t.fecha) AND
DAY(t1.fecha) = DAY(t.fecha) AND
condicional = 'no' )
FROM @TABLE t ) xx
Por cierto en mi caso condicional es 'si' y 'no', si existen otros condicionales, por ejemplo cuando coloquen 0 es 'no' eso agregalo a los select cont1 y cont2 en la parte del where.
Saludos