2016-12-15 18 views
5

i dinamik bir sonucuMySQL hatası: sql_mode = only_full_group_by

SELECT 
    M.nom_utilisateur, 
    SUM(M.montant_bulletin) as Montant_Total_BS, 
    SUM(M.montant_payer ) as Montant_Total_payer, 
    COUNT(M.ref_bs) as nbr_bs_total, 

(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Remboursé")) as nbr_bs_total_payer, 

(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Non remboursé")) as nbr_bs_non_payer, 

(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "En cours")) as nbr_bs_en_cours, 

(SELECT COUNT(*) FROM mutuelle_bi.`Mutuelle` WHERE nom_utilisateur = M.nom_utilisateur AND (M.nom_assurence = "Star" AND M.etat_bs = "Nouveau")) as nbr_bs_nouveau 
    FROM mutuelle_bi.`Mutuelle` M 
    WHERE M.nom_assurence = "Star" 
    GROUP BY M.nom_utilisateur 

ama bir şey yanlış giderse için basit projeksiyon yapmak alışkınım bu senaryomuz var; ben bu hata var gibidir:

1055 - SEÇ listenin İfade 5. GROUP BY deyiminde değildir ve GROUP BY deyiminde sütunlarda işlevsel bağlı değildir nonaggregated sütun 'mutuelle_bi.M.etat_bs' içeriyor ; Bu i benim sql server herhangi yapılandırma dosyasını değiştirmek gerektiğini, verilen bu sorunu çözmek için bu arada benim programı değiştirebilir nasıl

enter image description here

only_full_group_by = sql_mode ile uyumsuz . ve sadece komut dosyalarını yazmalıyım

Herhangi bir öneri?

+0

Alt sorgular yerine koşullu sayımı kullanmanız gerekir. – Shadow

+0

Sadece mevcut oturum için değiştirilebilen "only_full_group_by" değerini tutmak isteyip istemediğinizi değil, tabii ki sahte sonuç kümelerini engellemeye yardımcı olan bir özelliktir. –

+0

"ANY_VALUE()" işlevini, ayrıştırılmamış sütunda basitçe kullanabilirsiniz. Bakınız: http://stackoverflow.com/a/40578865/439171 –

cevap

3

Ben sadece koşullu agregasyonunu istediğini düşünüyorum:

SELECT M.nom_utilisateur, 
     SUM(M.montant_bulletin) as Montant_Total_BS, 
     SUM(M.montant_payer) as Montant_Total_payer, 
     SUM(M.etat_bs = 'Remboursé') as nbr_bs_total_payer, 
     SUM(M.etat_bs = 'Non remboursé') as nbr_bs_non_payer, 
     SUM(M.etat_bs = 'En cours') as nbr_bs_en_cours, 
     SUM(M.etat_bs = 'Nouveau') as nbr_bs_nouveau 
FROM mutuelle_bi.`Mutuelle` M 
WHERE M.nom_assurence = 'Star' 
GROUP BY M.nom_utilisateur; 
7

Ayrıca only_full_group_by ayarını devre dışı bırakmak için deneyebilirsiniz:

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 

benim için çalıştı.