Lo que estás tratando de ubicar es la cantidad de ocurrencias de cada estado, y como el campo es siempre el mismo, creas una subconsulta por cada uno.
La idea esta cerca, pero no es eficiente. Cada una de esas consultas barre toda la tabla; po reso es lenta: Al haber cinco estados hay cinco barridos de tabla. Y como no hay índices en ese campo la cosa se toma todo el tiempo posible...
Existen dos formas simples de encarar el asunto:
1. La que te está proponiendo jurena, con el INNER JOIN.
2. Sumar las ocurrencias en una sola barrida.
Esta segunda sería:
Código sql:
Ver originalSELECT
IDTipo,
NombreTipo,
SUM(IF(STATUS = 'Status1',1,0)) Status01,
SUM(IF(STATUS = 'Status2',1,0)) Status02,
SUM(IF(STATUS = 'Status3',1,0)) Status03,
SUM(IF(STATUS = 'Status4',1,0)) Status04,
SUM(IF(STATUS = 'Status5',1,0)) Status05
FROM tblTipoDato
WHERE
TipoDato=IDTipoDato;
En definitiva, lo que hará por cada registro es sumar 1 ó 0 según sea el valor del campo, en cada caso.
Pruébalo y nos cuentas.