2017-10-20 45 views
2

Je cours un compte distinct sur une table sql server en utilisant pyodbc. Lorsque j'exécute la requête en mode natif sql server, j'obtiens des résultats différents. La sortie donne toutes les colonnes comme '1' quand les valeurs réelles devraient être 151988 pour toutes les colonnes.pyodbc paramétré nombre de résultats sql distinct incorrect

A 
distinctcount 1 
B 
distinctcount 1 

Si je lance un simple comptage de sélection (*), le résultat est cohérent avec le résultat en sql server.

for col in columns: 
    cursor.execute("select count(?) from table" , col) 
    print (col) 
    a = cursor.fetchone() 
    rowcount = a[0] 
    print ('rowcount %s '% rowcount) 

Résultat:

A 
rowcount 151988 
B 
rowcount 151988 

Répondre

1

substitution de paramètre ne peut pas être utilisé pour spécifier la colonne (ou tableau) noms, seule colonne valeurs. Vous exécutez une requête qui est essentiellement

select count(distinct('A')) from table 

et revient 1 parce que la valeur littérale 'A' est la même pour toutes les lignes donc il n'y a qu'une seule valeur distincte.

Pour spécifier une colonne nom vous devez utiliser SQL dynamique, par exemple,

sql = "select count(distinct([{}])) from table".format(col) 
cursor.execute(sql) 
+0

est logique, merci! – joshi123