Simplemente no puede tener una instrucción SQL estática que devuelva un número variable de columnas. Debe generar dicha declaración cada vez que cambie el número de distritos diferentes. Para hacer eso, ejecuta primero un
SELECT DISTINCT District FROM district_details;
Esto le dará la lista de distritos donde hay detalles. Luego crea una declaración SQL iterando sobre el resultado anterior (pseudocódigo)
statement = "SELECT name "
For each row returned in d = SELECT DISTINCT District FROM district_details
statement = statement & ", SUM(IF(District=""" & d.District & """,1 ,0)) AS """ & d.District & """"
statement = statement & " FROM district_details GROUP BY name;"
Y ejecutar esa consulta. Luego deberá manejar en su código el procesamiento del número variable de columnas