2016-12-15 10 views
5

私はダイナミックな結果のための単純な投影MySQLエラー: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 

を行うために使用していますが、何かがうまくいかない、このスクリプトを持っています。私はこのエラーを持っているように:

1055 - SELECTリストの式#5は、GROUP BY句ではなく、 は、GROUP BY句で列に 機能的に依存しない非集約列「mutuelle_bi.M.etat_bs」を含みます;これは

enter image description here

どのように私は私のSQL Serverのいずれかの設定ファイルを変更してはならないことを考えると、この問題を解決するための方法で を私のスクリプトを変更することがありONLY_FULL_GROUP_BY = sql_modeのと互換性がない です。と私はスクリプトを書く必要があります

任意の提案??

+0

サブクエリの代わりに条件付きカウントを使用する必要があります。 – Shadow

+0

'only_full_group_by'を残そうとしているかどうかは完全にはっきりしていません。これは現在のセッションでのみ変更できますが、偽の結果セットを防止する機能です。 –

+0

非集約列の 'ANY_VALUE()'関数を簡単に使うことができます。参照:http://stackoverflow.com/a/40578865/439171 –

答えて

3

私はあなただけで、条件付き集計をしたいと思う:

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

ます。またonly_full_group_by設定を無効にしてみてください:

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'; 

が私のために働きました。

関連する問題