Você simplesmente não pode ter uma instrução SQL estática retornando um número variável de colunas. Você precisa construir tal declaração cada vez que o número de diferentes distritos mudar. Para fazer isso, você executa primeiro um
SELECT DISTINCT District FROM district_details;
Isso lhe dará a lista de distritos onde há detalhes. Você então constrói uma instrução SQL iterando sobre o 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;"
E execute essa consulta. Você precisará manipular em seu código o processamento da variável número de colunas